DROP TRIGGER TESTES_OR.LOG_VIDEOS;

CREATE OR REPLACE TRIGGER TESTES_OR.LOG_VIDEOS AFTER INSERT OR UPDATE OR DELETE ON TESTES_OR.TB_VIDEO FOR EACH ROW
BEGIN
    IF(INSERTING) THEN
        INSERT INTO TB_LOG ( NID_LOG, DDATA_HORA, VVALOR_ANTERIOR, VACAO, EDITOR) 
            VALUES (SEQ_LOG_ID.NEXTVAL, SYSDATE, NULL , 'CADASTRO', :NEW.EDITOR );

    ELSIF (UPDATING) THEN
        INSERT INTO TB_LOG ( NID_LOG, DDATA_HORA, VVALOR_ANTERIOR, VACAO, EDITOR) 
            VALUES (SEQ_LOG_ID.NEXTVAL, SYSDATE, SUBSTR ('TIT: ' || :OLD.VTITULO || '. DESC: ' || :OLD.VDESCRICAO || '. VER: ' || :OLD.NVERSAO || '. DUR: ' ||:OLD.NDURACAO, 1, 254), 'ATUALIZACAO', :NEW.EDITOR);

    ELSIF (DELETING) THEN
        INSERT INTO TB_LOG ( NID_LOG, DDATA_HORA, VVALOR_ANTERIOR, VACAO, EDITOR) 
            VALUES (SEQ_LOG_ID.NEXTVAL, SYSDATE, SUBSTR ('TIT: ' || :OLD.VTITULO || '. DESC: ' || :OLD.VDESCRICAO || '. VER: ' || :OLD.NVERSAO || '. DUR: ' ||:OLD.NDURACAO, 1, 254), 'EXCLUSAO', :NEW.EDITOR);
    
    END IF;
END;
/
DROP TYPE TESTES_OR.TP_ENDERECO;

CREATE OR REPLACE TYPE TESTES_OR.TP_ENDERECO AS OBJECT (
        NID_ENDERECO NUMBER,
        VRUA VARCHAR2(50),
        NNUMERO NUMBER,
        VBAIRRO VARCHAR2 (30),
        VCIDADE VARCHAR2(30),
        VESTADO VARCHAR2(30),
        
        MEMBER PROCEDURE CADASTRAR_ENDERECO,
        MEMBER PROCEDURE ATUALIZAR_ENDERECO,
        MEMBER PROCEDURE EXCLUIR_ENDERECO
    );
/


DROP TYPE TESTES_OR.TP_ESTADO;

CREATE OR REPLACE TYPE TESTES_OR.TP_ESTADO AS OBJECT (
    NID_ESTADO NUMBER,
    VNOME VARCHAR2(20),
    
    MEMBER PROCEDURE CADASTRAR_ESTADO,
     MEMBER PROCEDURE ATUALIZAR_ESTADO,
     MEMBER PROCEDURE EXCLUIR_ESTADO
    
    );
/


DROP TYPE TESTES_OR.TP_SITUACAO;

CREATE OR REPLACE TYPE TESTES_OR.TP_SITUACAO AS OBJECT (
    NID_SITUACAO NUMBER,
    VNOME VARCHAR2(20),
    
     MEMBER PROCEDURE CADASTRAR_SITUACAO,
     MEMBER PROCEDURE ATUALIZAR_SITUACAO,
     MEMBER PROCEDURE EXCLUIR_SITUACAO
    
    );
/


DROP TYPE TESTES_OR.TP_TELEFONE;

CREATE OR REPLACE TYPE TESTES_OR.TP_TELEFONE AS OBJECT
(
                     NID_TELEFONE NUMBER,
                     NDDD NUMBER,
                     VTELEFONE VARCHAR2 (10),
                     MEMBER PROCEDURE CADASTRAR_TELEFONE,
                     MEMBER PROCEDURE ATUALIZAR_TELEFONE,
                     MEMBER PROCEDURE EXCLUIR_TELEFONE
)
 ALTER TYPE TP_TELEFONE ADD MAP MEMBER FUNCTION GETID_TELEFONE RETURN NUMBER CASCADE
/


DROP TYPE TESTES_OR.TP_VARR_TELEFONES;

CREATE OR REPLACE TYPE TESTES_OR.TP_VARR_TELEFONES AS VARRAY (2) OF REF TP_TELEFONE;
/


DROP TYPE BODY TESTES_OR.TP_ADMINISTRADOR;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_ADMINISTRADOR
AS
   MEMBER PROCEDURE CADASTRAR_ADMINISTRADOR (ID_DEPARTAMENTO NUMBER)
   IS
   BEGIN
      INSERT INTO TB_ADMINISTRADOR ( NID_USUARIO, VNOME, NMATRICULA, VCARGO, VEMAIL, VLOGIN, VSENHA, CTIPO, DEPARTAMENTO )
           VALUES (
           SELF.NID_USUARIO, SELF.VNOME, SELF.NMATRICULA, SELF.VCARGO, SELF.VEMAIL, SELF.VLOGIN, SELF.VSENHA, SELF.CTIPO, 
           (SELECT REF ( D ) FROM TB_DEPARTAMENTO D WHERE NID_DEPARTAMENTO = ID_DEPARTAMENTO)
           );
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20037, 'Ja existe um usuario administrador com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20038, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   MEMBER PROCEDURE ATUALIZAR_ADMINISTRADOR (ID_DEPARTAMENTO NUMBER)
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_ADMINISTRADOR
         SET  VNOME = SELF.VNOME, NMATRICULA = SELF.NMATRICULA, VCARGO = SELF.VCARGO, VEMAIL = SELF.VEMAIL, 
         VLOGIN = SELF.VLOGIN, VSENHA = SELF.VSENHA, CTIPO = SELF.CTIPO, 
         DEPARTAMENTO = (SELECT REF ( D ) FROM TB_DEPARTAMENTO D WHERE NID_DEPARTAMENTO = ID_DEPARTAMENTO)
       WHERE NID_USUARIO = SELF.NID_USUARIO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20039, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20040, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
   MEMBER PROCEDURE EXCLUIR_ADMINISTRADOR
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_ADMINISTRADOR
            WHERE NID_USUARIO = SELF.NID_USUARIO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20041, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20042, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

END;
/


DROP TYPE BODY TESTES_OR.TP_AUDIO_ANEXO;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_AUDIO_ANEXO
AS
   MEMBER PROCEDURE CADASTRAR_AUDIO_ANEXO (ID_VIDEO NUMBER)
   IS
   BEGIN
      INSERT INTO TB_AUDIO_ANEXO ( NID_ANEXO, VNOME, VDESCRICAO, CTIPO, VEXTENSAO, BANEXO, NDURACAO, VIDEO)
           VALUES (
           SELF.NID_ANEXO, SELF.VNOME, SELF.VDESCRICAO, SELF.CTIPO, SELF.VEXTENSAO, SELF.BANEXO, 
           SELF.NDURACAO, (SELECT REF (V) FROM TB_VIDEO V WHERE NID_VIDEO = ID_VIDEO)
           );
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20061, 'Ja existe um audio anexo com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20062, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   MEMBER PROCEDURE ATUALIZAR_AUDIO_ANEXO (ID_VIDEO NUMBER)
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_AUDIO_ANEXO
         SET VNOME = SELF.VNOME, VDESCRICAO = SELF.VDESCRICAO, CTIPO = SELF.CTIPO,
                VEXTENSAO = VEXTENSAO, BANEXO = SELF.BANEXO, NDURACAO = SELF.NDURACAO,
                VIDEO = (SELECT REF (V) FROM TB_VIDEO V WHERE NID_VIDEO = ID_VIDEO)
       WHERE NID_ANEXO = SELF.NID_ANEXO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20063, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20054, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
   MEMBER PROCEDURE EXCLUIR_AUDIO_ANEXO
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_AUDIO_ANEXO
            WHERE NID_ANEXO = SELF.NID_ANEXO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20065, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20066, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

END;
/


DROP TYPE BODY TESTES_OR.TP_DEPARTAMENTO;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_DEPARTAMENTO
AS
   MEMBER PROCEDURE CADASTRAR_DEPARTAMENTO (ID_EMPRESA NUMBER)
   IS
   BEGIN
      INSERT INTO TB_DEPARTAMENTO ( NID_DEPARTAMENTO, VNOME, VAREA, EMPRESA )
           VALUES (
           SELF.NID_DEPARTAMENTO, SELF.VNOME, SELF.VAREA, 
           (SELECT REF ( E ) FROM TB_EMPRESA E WHERE NID_EMPRESA = ID_EMPRESA)
           );
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20019, 'Ja existe um departamento com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20020, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   MEMBER PROCEDURE ATUALIZAR_DEPARTAMENTO (ID_EMPRESA NUMBER)
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_DEPARTAMENTO
         SET VNOME = SELF.VNOME, VAREA = SELF.VAREA, 
         EMPRESA = (SELECT REF ( E ) FROM TB_EMPRESA E WHERE NID_EMPRESA = ID_EMPRESA)
       WHERE NID_DEPARTAMENTO= SELF.NID_DEPARTAMENTO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20021, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20022, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
   MEMBER PROCEDURE EXCLUIR_DEPARTAMENTO
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_DEPARTAMENTO
            WHERE NID_DEPARTAMENTO = SELF.NID_DEPARTAMENTO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20023, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20024, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

END;
/


DROP TYPE BODY TESTES_OR.TP_DOCUMENTO_ANEXO;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_DOCUMENTO_ANEXO
AS
   MEMBER PROCEDURE CADASTRAR_DOCUMENTO_ANEXO (ID_VIDEO NUMBER)
   IS
   BEGIN
      INSERT INTO TB_DOCUMENTO_ANEXO ( NID_ANEXO, VNOME, VDESCRICAO, CTIPO, VEXTENSAO, BANEXO,  NNUM_PAGINAS, VIDEO)
           VALUES (
           SELF.NID_ANEXO, SELF.VNOME, SELF.VDESCRICAO, SELF.CTIPO, SELF.VEXTENSAO, SELF.BANEXO, SELF.NNUM_PAGINAS,
           (SELECT REF (V) FROM TB_VIDEO V WHERE NID_VIDEO = ID_VIDEO)
           );
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20067, 'Ja existe um documento anexo com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20068, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   MEMBER PROCEDURE ATUALIZAR_DOCUMENTO_ANEXO (ID_VIDEO NUMBER)
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_DOCUMENTO_ANEXO
         SET VNOME = SELF.VNOME, VDESCRICAO = SELF.VDESCRICAO, CTIPO = SELF.CTIPO,
                VEXTENSAO = VEXTENSAO, BANEXO = SELF.BANEXO, NNUM_PAGINAS = SELF.NNUM_PAGINAS,
                VIDEO = (SELECT REF (V) FROM TB_VIDEO V WHERE NID_VIDEO = ID_VIDEO)
       WHERE NID_ANEXO = SELF.NID_ANEXO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20069, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20070, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
   MEMBER PROCEDURE EXCLUIR_DOCUMENTO_ANEXO
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_DOCUMENTO_ANEXO
            WHERE NID_ANEXO = SELF.NID_ANEXO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20071, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20072, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

END;
/


DROP TYPE BODY TESTES_OR.TP_EDITOR;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_EDITOR
AS
   MEMBER PROCEDURE CADASTRAR_EDITOR (ID_DEPARTAMENTO NUMBER)
   IS
   BEGIN
      INSERT INTO TB_EDITOR ( NID_USUARIO, VNOME, NMATRICULA, VCARGO, VEMAIL, VLOGIN, VSENHA, CTIPO, DEPARTAMENTO )
           VALUES (
           SELF.NID_USUARIO, SELF.VNOME, SELF.NMATRICULA, SELF.VCARGO, SELF.VEMAIL, SELF.VLOGIN, SELF.VSENHA, SELF.CTIPO, 
           (SELECT REF ( D ) FROM TB_DEPARTAMENTO D WHERE NID_DEPARTAMENTO = ID_DEPARTAMENTO)
           );
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20025, 'Ja existe um editor com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20026, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   MEMBER PROCEDURE ATUALIZAR_EDITOR (ID_DEPARTAMENTO NUMBER)
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_EDITOR
         SET  VNOME = SELF.VNOME, NMATRICULA = SELF.NMATRICULA, VCARGO = SELF.VCARGO, VEMAIL = SELF.VEMAIL, 
         VLOGIN = SELF.VLOGIN, VSENHA = SELF.VSENHA, CTIPO = SELF.CTIPO, 
         DEPARTAMENTO = (SELECT REF ( D ) FROM TB_DEPARTAMENTO D WHERE NID_DEPARTAMENTO = ID_DEPARTAMENTO)
       WHERE NID_USUARIO = SELF.NID_USUARIO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20027, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20028, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
   MEMBER PROCEDURE EXCLUIR_EDITOR
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_EDITOR
            WHERE NID_USUARIO = SELF.NID_USUARIO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20029, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20030, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

END;
/


DROP TYPE BODY TESTES_OR.TP_EMPRESA;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_EMPRESA
AS
   MEMBER PROCEDURE CADASTRAR_EMPRESA ( ID_ENDERECO NUMBER, ID_TEL1 NUMBER, ID_TEL2 NUMBER)
   IS
   BEGIN
      INSERT INTO TB_EMPRESA ( NID_EMPRESA, VCNPJ, VRAZAO_SOCIAL, VEMAIL, VSITE, ENDERECO, TELEFONES )
           VALUES (
           SELF.NID_EMPRESA, SELF.VCNPJ, SELF.VRAZAO_SOCIAL, SELF.VEMAIL, SELF.VSITE, 
           (SELECT REF ( E ) FROM TB_ENDERECO E WHERE NID_ENDERECO = ID_ENDERECO),
           TP_VARR_TELEFONES (
                                            (SELECT REF (T)  FROM TB_TELEFONE T WHERE NID_TELEFONE = ID_TEL1),
                                            (SELECT REF (T)  FROM TB_TELEFONE T WHERE NID_TELEFONE = ID_TEL2)
                                     )
           );
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20013, 'Ja existe uma empresa com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20014, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   MEMBER PROCEDURE ATUALIZAR_EMPRESA ( ID_ENDERECO NUMBER, ID_TEL1 NUMBER, ID_TEL2 NUMBER)
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_EMPRESA
         SET VCNPJ = SELF.VCNPJ, VRAZAO_SOCIAL = SELF.VRAZAO_SOCIAL, VEMAIL = SELF.VEMAIL, VSITE = SELF.VSITE,
         ENDERECO = (SELECT REF (E) FROM TB_ENDERECO E WHERE NID_ENDERECO = ID_ENDERECO),
         TELEFONES = TP_VARR_TELEFONES (
                                            (SELECT REF (T)  FROM TB_TELEFONE T WHERE NID_TELEFONE = ID_TEL1),
                                            (SELECT REF (T)  FROM TB_TELEFONE T WHERE NID_TELEFONE = ID_TEL2)
                                     )
       WHERE NID_EMPRESA = SELF.NID_EMPRESA;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20015, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20016, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
   MEMBER PROCEDURE EXCLUIR_EMPRESA
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_EMPRESA
            WHERE NID_EMPRESA = SELF.NID_EMPRESA;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20017, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20018, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

END;
/


DROP TYPE BODY TESTES_OR.TP_ENDERECO;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_ENDERECO
AS
   MEMBER PROCEDURE CADASTRAR_ENDERECO 
   IS
   BEGIN
      INSERT INTO TB_ENDERECO ( NID_ENDERECO, VRUA, NNUMERO, VBAIRRO, VCIDADE, VESTADO)
           VALUES (SELF.NID_ENDERECO, SELF.VRUA, SELF.NNUMERO, SELF.VBAIRRO, SELF.VCIDADE, SELF.VESTADO);
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20007, 'Ja existe um endereco com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20008, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   MEMBER PROCEDURE ATUALIZAR_ENDERECO 
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_ENDERECO
         SET VRUA = SELF.VRUA, NNUMERO = SELF.NNUMERO, VBAIRRO = SELF.VBAIRRO, VCIDADE = SELF.VCIDADE, VESTADO = SELF.VESTADO
       WHERE NID_ENDERECO = SELF.NID_ENDERECO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20009, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20010, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
   MEMBER PROCEDURE EXCLUIR_ENDERECO
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_ENDERECO
            WHERE NID_ENDERECO = SELF.NID_ENDERECO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20011, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20012, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

END;
/


DROP TYPE BODY TESTES_OR.TP_ESTADO;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_ESTADO
AS
   MEMBER PROCEDURE CADASTRAR_ESTADO
   IS
   BEGIN
      INSERT INTO TB_ESTADO (NID_ESTADO, VNOME)
           VALUES (SELF.NID_ESTADO, SELF.VNOME);
      COMMIT;
    EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20049, 'Ja existe um estado com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20050, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   MEMBER PROCEDURE ATUALIZAR_ESTADO
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_ESTADO
         SET VNOME = SELF.VNOME
       WHERE NID_ESTADO = SELF.NID_ESTADO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20051, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20052, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
 MEMBER PROCEDURE EXCLUIR_ESTADO
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_ESTADO
            WHERE NID_ESTADO = SELF.NID_ESTADO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20053, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20054, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

    
END;
/


DROP TYPE BODY TESTES_OR.TP_IMAGEM_ANEXO;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_IMAGEM_ANEXO
AS
   MEMBER PROCEDURE CADASTRAR_IMAGEM_ANEXO (ID_VIDEO NUMBER)
   IS
   BEGIN
      INSERT INTO TB_IMAGEM_ANEXO ( NID_ANEXO, VNOME, VDESCRICAO, CTIPO, VEXTENSAO, BANEXO,  VRESOLUCAO, VIDEO)
           VALUES (
           SELF.NID_ANEXO, SELF.VNOME, SELF.VDESCRICAO, SELF.CTIPO, SELF.VEXTENSAO, SELF.BANEXO, SELF.VRESOLUCAO,
           (SELECT REF (V) FROM TB_VIDEO V WHERE NID_VIDEO = ID_VIDEO)
           );
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20073, 'Ja existe uma imagem em anexo com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20074, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   MEMBER PROCEDURE ATUALIZAR_IMAGEM_ANEXO (ID_VIDEO NUMBER)
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_IMAGEM_ANEXO
         SET VNOME = SELF.VNOME, VDESCRICAO = SELF.VDESCRICAO, CTIPO = SELF.CTIPO,
                VEXTENSAO = VEXTENSAO, BANEXO = SELF.BANEXO, VRESOLUCAO = SELF.VRESOLUCAO,
                VIDEO = (SELECT REF (V) FROM TB_VIDEO V WHERE NID_VIDEO = ID_VIDEO)
       WHERE NID_ANEXO = SELF.NID_ANEXO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20075, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20076, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
   MEMBER PROCEDURE EXCLUIR_IMAGEM_ANEXO
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_IMAGEM_ANEXO
            WHERE NID_ANEXO = SELF.NID_ANEXO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20077, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20078, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

END;
/


DROP TYPE BODY TESTES_OR.TP_NORMAL;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_NORMAL
AS
   MEMBER PROCEDURE CADASTRAR_NORMAL (ID_DEPARTAMENTO NUMBER)
   IS
   BEGIN
      INSERT INTO TB_NORMAL ( NID_USUARIO, VNOME, NMATRICULA, VCARGO, VEMAIL, VLOGIN, VSENHA, CTIPO, DEPARTAMENTO )
           VALUES (
           SELF.NID_USUARIO, SELF.VNOME, SELF.NMATRICULA, SELF.VCARGO, SELF.VEMAIL, SELF.VLOGIN, SELF.VSENHA, SELF.CTIPO, 
           (SELECT REF ( D ) FROM TB_DEPARTAMENTO D WHERE NID_DEPARTAMENTO = ID_DEPARTAMENTO)
           );
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20031, 'Ja existe um usuario normal com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20032, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   MEMBER PROCEDURE ATUALIZAR_NORMAL (ID_DEPARTAMENTO NUMBER)
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_NORMAL
         SET  VNOME = SELF.VNOME, NMATRICULA = SELF.NMATRICULA, VCARGO = SELF.VCARGO, VEMAIL = SELF.VEMAIL, 
         VLOGIN = SELF.VLOGIN, VSENHA = SELF.VSENHA, CTIPO = SELF.CTIPO, 
         DEPARTAMENTO = (SELECT REF ( D ) FROM TB_DEPARTAMENTO D WHERE NID_DEPARTAMENTO = ID_DEPARTAMENTO)
       WHERE NID_USUARIO = SELF.NID_USUARIO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20033, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20034, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
   MEMBER PROCEDURE EXCLUIR_NORMAL
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_NORMAL
            WHERE NID_USUARIO = SELF.NID_USUARIO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20035, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20036, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

END;
/


DROP TYPE BODY TESTES_OR.TP_SITUACAO;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_SITUACAO
AS
   MEMBER PROCEDURE CADASTRAR_SITUACAO 
   IS
   BEGIN
      INSERT INTO TB_SITUACAO (NID_SITUACAO, VNOME)
           VALUES (SELF.NID_SITUACAO, SELF.VNOME);
      COMMIT;
    EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20043, 'Ja existe uma situacao com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20044, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   MEMBER PROCEDURE ATUALIZAR_SITUACAO
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_SITUACAO
         SET VNOME = SELF.VNOME
       WHERE NID_SITUACAO = SELF.NID_SITUACAO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20045, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20046, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
 MEMBER PROCEDURE EXCLUIR_SITUACAO
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_SITUACAO
            WHERE NID_SITUACAO = SELF.NID_SITUACAO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20047, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20048, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

    
END;
/


DROP TYPE BODY TESTES_OR.TP_TELEFONE;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_TELEFONE
AS
   MEMBER PROCEDURE CADASTRAR_TELEFONE 
   IS
   BEGIN
      INSERT INTO TB_TELEFONE (NID_TELEFONE, NDDD, VTELEFONE)
           VALUES (SELF.NID_TELEFONE, SELF.NDDD, SELF.VTELEFONE);
      COMMIT;
    EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20001, 'Ja existe um telefone com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20002, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   MEMBER PROCEDURE ATUALIZAR_TELEFONE
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_TELEFONE
         SET NDDD = SELF.NDDD, VTELEFONE = SELF.VTELEFONE
       WHERE NID_TELEFONE = SELF.NID_TELEFONE;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20003, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20004, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
 MEMBER PROCEDURE EXCLUIR_TELEFONE
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_TELEFONE
            WHERE NID_TELEFONE = SELF.NID_TELEFONE;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20005, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20006, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

   MAP MEMBER FUNCTION GETID_TELEFONE RETURN NUMBER IS
    BEGIN
            RETURN SELF.NID_TELEFONE;
    END;
END;
/


DROP TYPE TESTES_OR.TP_EMPRESA;

CREATE OR REPLACE TYPE TESTES_OR.TP_EMPRESA AS OBJECT (
        NID_EMPRESA NUMBER,
        VCNPJ VARCHAR2(16),
        VRAZAO_SOCIAL VARCHAR2(30),
        VEMAIL VARCHAR2(30),
        VSITE VARCHAR2(30),
        ENDERECO REF TP_ENDERECO,
        TELEFONES TP_VARR_TELEFONES,

        
        MEMBER PROCEDURE CADASTRAR_EMPRESA (ID_ENDERECO NUMBER, ID_TEL1 NUMBER, ID_TEL2 NUMBER),
        MEMBER PROCEDURE ATUALIZAR_EMPRESA (ID_ENDERECO NUMBER, ID_TEL1 NUMBER, ID_TEL2 NUMBER),
        MEMBER PROCEDURE EXCLUIR_EMPRESA
    )   ;
/


DROP TYPE TESTES_OR.TP_DEPARTAMENTO;

CREATE OR REPLACE TYPE TESTES_OR.TP_DEPARTAMENTO AS OBJECT (
    NID_DEPARTAMENTO NUMBER,
    VNOME VARCHAR2(30),
    VAREA VARCHAR2(30),
    EMPRESA REF TP_EMPRESA,
    
    MEMBER PROCEDURE CADASTRAR_DEPARTAMENTO (ID_EMPRESA NUMBER),
    MEMBER PROCEDURE ATUALIZAR_DEPARTAMENTO (ID_EMPRESA NUMBER),
    MEMBER PROCEDURE EXCLUIR_DEPARTAMENTO
);
/


DROP TYPE TESTES_OR.TP_USUARIO;

CREATE OR REPLACE TYPE TESTES_OR.TP_USUARIO AS OBJECT (
    NID_USUARIO NUMBER,
    VNOME VARCHAR2(50),
    NMATRICULA NUMBER,
    VCARGO VARCHAR2(30),
    VEMAIL VARCHAR2(30),
    VLOGIN VARCHAR2(30),
    VSENHA VARCHAR2(20),
    CTIPO CHAR(1),
    DEPARTAMENTO REF TP_DEPARTAMENTO
) NOT FINAL NOT INSTANTIABLE;
/


DROP TYPE TESTES_OR.TP_ADMINISTRADOR;

CREATE OR REPLACE TYPE TESTES_OR.TP_ADMINISTRADOR UNDER TP_USUARIO  
(               
    MEMBER PROCEDURE CADASTRAR_ADMINISTRADOR (ID_DEPARTAMENTO NUMBER),
    MEMBER PROCEDURE ATUALIZAR_ADMINISTRADOR (ID_DEPARTAMENTO NUMBER),
    MEMBER PROCEDURE EXCLUIR_ADMINISTRADOR
);
/


DROP TYPE TESTES_OR.TP_EDITOR;

CREATE OR REPLACE TYPE TESTES_OR.TP_EDITOR UNDER TP_USUARIO  
(               
    MEMBER PROCEDURE CADASTRAR_EDITOR (ID_DEPARTAMENTO NUMBER),
    MEMBER PROCEDURE ATUALIZAR_EDITOR (ID_DEPARTAMENTO NUMBER),
    MEMBER PROCEDURE EXCLUIR_EDITOR
);
/


DROP TYPE TESTES_OR.TP_LOG;

CREATE OR REPLACE TYPE TESTES_OR.TP_LOG AS OBJECT (
    NID_LOG NUMBER,
    DDATA_HORA DATE,
    VVALOR_ANTERIOR VARCHAR2(255),
    VACAO VARCHAR2(255),
    EDITOR REF TP_EDITOR  
);
/


DROP TYPE TESTES_OR.TP_NORMAL;

CREATE OR REPLACE TYPE TESTES_OR.TP_NORMAL UNDER TP_USUARIO  
(               
    MEMBER PROCEDURE CADASTRAR_NORMAL (ID_DEPARTAMENTO NUMBER),
    MEMBER PROCEDURE ATUALIZAR_NORMAL (ID_DEPARTAMENTO NUMBER),
    MEMBER PROCEDURE EXCLUIR_NORMAL
);
/


DROP TYPE TESTES_OR.TP_VIDEO;

CREATE OR REPLACE TYPE TESTES_OR.TP_VIDEO AS OBJECT (
    NID_VIDEO NUMBER,
    VTITULO VARCHAR2(50),
    VDESCRICAO VARCHAR2(255),
    NVERSAO NUMBER,
    VTIPO VARCHAR2(20),
    NDURACAO NUMBER,
    BVIDEO BLOB,
    SITUACAO REF TP_SITUACAO,
    ESTADO REF TP_ESTADO,
    TAGS  NT_TAGS,
    PROFISSIONAIS NT_PROFISSIONAIS,
    EDITOR REF TP_EDITOR,
    
    MEMBER PROCEDURE CADASTRAR_VIDEO ( ID_SITUACAO NUMBER, ID_ESTADO NUMBER, ID_TAGS NUMBER, ID_PROFISSIONAIS NUMBER, ID_EDITOR NUMBER)--,
    --MEMBER PROCEDURE ATUALIZAR_VIDEO (ID_ENDERECO NUMBER, ID_TEL1 NUMBER, ID_TEL2 NUMBER),
    --MEMBER PROCEDURE EXCLUIR_VIDEO
);
/


DROP TYPE TESTES_OR.TP_VIDEO_ANEXO;

CREATE OR REPLACE TYPE TESTES_OR.TP_VIDEO_ANEXO UNDER TP_ANEXO (
    VRESOLUCAO VARCHAR2(20),
    NDURACAO NUMBER,
    
    MEMBER PROCEDURE CADASTRAR_VIDEO_ANEXO (ID_VIDEO NUMBER),
    MEMBER PROCEDURE ATUALIZAR_VIDEO_ANEXO (ID_VIDEO NUMBER),
    MEMBER PROCEDURE EXCLUIR_VIDEO_ANEXO
    
);
/


DROP TYPE TESTES_OR.NT_VIDEO;

CREATE OR REPLACE TYPE TESTES_OR.NT_VIDEO AS TABLE OF REF TP_VIDEO;
/


DROP TYPE TESTES_OR.NT_VIDEOS;

CREATE OR REPLACE TYPE TESTES_OR.NT_VIDEOS AS TABLE OF REF TP_VIDEO;
/


DROP TYPE TESTES_OR.TP_ANEXO;

CREATE OR REPLACE TYPE TESTES_OR.TP_ANEXO AS OBJECT (
    NID_ANEXO NUMBER,
    VNOME VARCHAR2(50),
    VDESCRICAO VARCHAR2(255),
    CTIPO CHAR(1),
    VEXTENSAO VARCHAR2(10),
    BANEXO BLOB, 
    VIDEO REF TP_VIDEO
) NOT INSTANTIABLE NOT FINAL;
/


DROP TYPE TESTES_OR.TP_AUDIO_ANEXO;

CREATE OR REPLACE TYPE TESTES_OR.TP_AUDIO_ANEXO UNDER TP_ANEXO (
    NDURACAO NUMBER,
    
    MEMBER PROCEDURE CADASTRAR_AUDIO_ANEXO (ID_VIDEO NUMBER),
    MEMBER PROCEDURE ATUALIZAR_AUDIO_ANEXO (ID_VIDEO NUMBER),
    MEMBER PROCEDURE EXCLUIR_AUDIO_ANEXO
    
);
/


DROP TYPE TESTES_OR.TP_DOCUMENTO_ANEXO;

CREATE OR REPLACE TYPE TESTES_OR.TP_DOCUMENTO_ANEXO UNDER TP_ANEXO (
    NNUM_PAGINAS NUMBER,
    
    MEMBER PROCEDURE CADASTRAR_DOCUMENTO_ANEXO (ID_VIDEO NUMBER),
    MEMBER PROCEDURE ATUALIZAR_DOCUMENTO_ANEXO (ID_VIDEO NUMBER),
    MEMBER PROCEDURE EXCLUIR_DOCUMENTO_ANEXO
    
);
/


DROP TYPE TESTES_OR.TP_IMAGEM_ANEXO;

CREATE OR REPLACE TYPE TESTES_OR.TP_IMAGEM_ANEXO UNDER TP_ANEXO (
    VRESOLUCAO VARCHAR2(20),
    
    MEMBER PROCEDURE CADASTRAR_IMAGEM_ANEXO (ID_VIDEO NUMBER),
    MEMBER PROCEDURE ATUALIZAR_IMAGEM_ANEXO (ID_VIDEO NUMBER),
    MEMBER PROCEDURE EXCLUIR_IMAGEM_ANEXO
    
);
/


DROP TYPE TESTES_OR.TP_PROFISSIONAL;

CREATE OR REPLACE TYPE TESTES_OR.TP_PROFISSIONAL AS OBJECT (
    NID_PROFISSIONAL NUMBER,
    VCODIGO VARCHAR2(30),
    VNOME VARCHAR2(50),
    VESPECIALIDADE VARCHAR2(30),
    TELEFONES  TP_VARR_TELEFONES,
    VIDEOS NT_VIDEOS,
    MEMBER PROCEDURE CADASTRAR_PROFISSIONAL (ID_VIDEO NUMBER, ID_TEL1 NUMBER, ID_TEL2 NUMBER),
    MEMBER PROCEDURE ATUALIZAR_PROFISSIONAL (ID_VIDEO NUMBER, ID_TEL1 NUMBER, ID_TEL2 NUMBER),
    MEMBER PROCEDURE EXCLUIR_PROFISSIONAL
);
/


DROP TYPE TESTES_OR.TP_TAG;

CREATE OR REPLACE TYPE TESTES_OR.TP_TAG AS OBJECT (
    NID_TAG NUMBER,
    VNOME VARCHAR2(20),
    VIDEO NT_VIDEOS,
    
    MEMBER PROCEDURE CADASTRAR_TAG (ID_VIDEO NUMBER),
    MEMBER PROCEDURE ATUALIZAR_TAG (ID_VIDEO NUMBER),
    MEMBER PROCEDURE EXCLUIR_TAG
);
/


DROP TYPE BODY TESTES_OR.TP_VIDEO_ANEXO;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_VIDEO_ANEXO
AS
   MEMBER PROCEDURE CADASTRAR_VIDEO_ANEXO (ID_VIDEO NUMBER)
   IS
   BEGIN
      INSERT INTO TB_VIDEO_ANEXO ( NID_ANEXO, VNOME, VDESCRICAO, CTIPO, VEXTENSAO, BANEXO,  VRESOLUCAO, NDURACAO, VIDEO)
           VALUES (
           SELF.NID_ANEXO, SELF.VNOME, SELF.VDESCRICAO, SELF.CTIPO, SELF.VEXTENSAO, SELF.BANEXO,  SELF.VRESOLUCAO, SELF.NDURACAO, 
           (SELECT REF (V) FROM TB_VIDEO V WHERE NID_VIDEO = ID_VIDEO)
           );
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20055, 'Ja existe um video anexo com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20056, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   MEMBER PROCEDURE ATUALIZAR_VIDEO_ANEXO (ID_VIDEO NUMBER)
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_VIDEO_ANEXO
         SET VNOME = SELF.VNOME, VDESCRICAO = SELF.VDESCRICAO, CTIPO = SELF.CTIPO,
                VEXTENSAO = VEXTENSAO, BANEXO = SELF.BANEXO,  VRESOLUCAO = SELF.VRESOLUCAO, NDURACAO = SELF.NDURACAO,
                VIDEO = (SELECT REF (V) FROM TB_VIDEO V WHERE NID_VIDEO = ID_VIDEO)
       WHERE NID_ANEXO = SELF.NID_ANEXO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20057, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20058, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
   MEMBER PROCEDURE EXCLUIR_VIDEO_ANEXO
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_VIDEO_ANEXO
            WHERE NID_ANEXO = SELF.NID_ANEXO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20059, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20060, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

END;
/


DROP TYPE TESTES_OR.NT_PROFISSIONAIS;

CREATE OR REPLACE TYPE TESTES_OR.NT_PROFISSIONAIS AS TABLE OF REF TP_PROFISSIONAL;
/


DROP TYPE TESTES_OR.NT_TAGS;

CREATE OR REPLACE TYPE TESTES_OR.NT_TAGS AS TABLE OF REF TP_TAG;
/


DROP TYPE BODY TESTES_OR.TP_VIDEO;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_VIDEO
AS
   MEMBER PROCEDURE CADASTRAR_VIDEO ( ID_SITUACAO NUMBER, ID_ESTADO NUMBER, ID_TAGS NUMBER, ID_PROFISSIONAIS NUMBER, ID_EDITOR NUMBER)
   IS
   BEGIN
      INSERT INTO TB_VIDEO (NID_VIDEO, VTITULO, VDESCRICAO, NVERSAO, VTIPO, NDURACAO, BVIDEO, SITUACAO, ESTADO, TAGS, PROFISSIONAIS, EDITOR )
           VALUES (
           SELF.NID_VIDEO, SELF.VTITULO, SELF.VDESCRICAO, SELF.NVERSAO, SELF.VTIPO, SELF.NDURACAO, SELF.BVIDEO, 
           (SELECT REF ( S ) FROM TB_SITUACAO S WHERE NID_SITUACAO = ID_SITUACAO),
           (SELECT REF ( E ) FROM TB_ESTADO E WHERE NID_ESTADO = ID_ESTADO),
           NT_TAGS ( (SELECT REF ( T ) FROM TB_TAG T WHERE NID_TAG = ID_TAGS) ),
           NT_PROFISSIONAIS ((SELECT REF ( P ) FROM TB_PROFISSIONAL P WHERE NID_PROFISSIONAL = ID_PROFISSIONAIS) ),
           (SELECT REF ( E ) FROM TB_EDITOR E WHERE NID_USUARIO = ID_EDITOR)
           );
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20079, 'Ja existe uma video com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20080, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   END;
/
DROP SEQUENCE TESTES_OR.SEQ_ADMINISTRADOR_ID;

CREATE SEQUENCE TESTES_OR.SEQ_ADMINISTRADOR_ID
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  NOCACHE
  NOORDER;


DROP SEQUENCE TESTES_OR.SEQ_AUDIO_ANEXO;

CREATE SEQUENCE TESTES_OR.SEQ_AUDIO_ANEXO
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  NOCACHE
  NOORDER;


DROP SEQUENCE TESTES_OR.SEQ_DEPARTAMENTO_ID;

CREATE SEQUENCE TESTES_OR.SEQ_DEPARTAMENTO_ID
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  NOCACHE
  NOORDER;


DROP SEQUENCE TESTES_OR.SEQ_DOCUMENTO_ANEXO;

CREATE SEQUENCE TESTES_OR.SEQ_DOCUMENTO_ANEXO
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  NOCACHE
  NOORDER;


DROP SEQUENCE TESTES_OR.SEQ_EDITOR_ID;

CREATE SEQUENCE TESTES_OR.SEQ_EDITOR_ID
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  NOCACHE
  NOORDER;


DROP SEQUENCE TESTES_OR.SEQ_EMPRESA_ID;

CREATE SEQUENCE TESTES_OR.SEQ_EMPRESA_ID
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  NOCACHE
  NOORDER;


DROP SEQUENCE TESTES_OR.SEQ_ENDERECO_ID;

CREATE SEQUENCE TESTES_OR.SEQ_ENDERECO_ID
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  NOCACHE
  NOORDER;


DROP SEQUENCE TESTES_OR.SEQ_ESTADO_ID;

CREATE SEQUENCE TESTES_OR.SEQ_ESTADO_ID
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  NOCACHE
  NOORDER;


DROP SEQUENCE TESTES_OR.SEQ_IMAGEM_ANEXO;

CREATE SEQUENCE TESTES_OR.SEQ_IMAGEM_ANEXO
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  NOCACHE
  NOORDER;


DROP SEQUENCE TESTES_OR.SEQ_LOG_ID;

CREATE SEQUENCE TESTES_OR.SEQ_LOG_ID
  START WITH 2
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  NOCACHE
  NOORDER;


DROP SEQUENCE TESTES_OR.SEQ_NORMAL_ID;

CREATE SEQUENCE TESTES_OR.SEQ_NORMAL_ID
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  NOCACHE
  NOORDER;


DROP SEQUENCE TESTES_OR.SEQ_SITUACAO_ID;

CREATE SEQUENCE TESTES_OR.SEQ_SITUACAO_ID
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  NOCACHE
  NOORDER;


DROP SEQUENCE TESTES_OR.SEQ_TELEFONE_ID;

CREATE SEQUENCE TESTES_OR.SEQ_TELEFONE_ID
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  NOCACHE
  NOORDER;


DROP SEQUENCE TESTES_OR.SEQ_VIDEO_ANEXO;

CREATE SEQUENCE TESTES_OR.SEQ_VIDEO_ANEXO
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  NOCACHE
  NOORDER;


DROP SEQUENCE TESTES_OR.SEQ_VIDEO_ID;

CREATE SEQUENCE TESTES_OR.SEQ_VIDEO_ID
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  NOCACHE
  NOORDER;
DROP INDEX TESTES_OR.SYS_FK0000022734N00012$;

CREATE INDEX TESTES_OR.SYS_FK0000022734N00012$ ON TESTES_OR.TB_TAGS_VIDEO
(NESTED_TABLE_ID)
LOGGING
TABLESPACE SYSTEM
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


DROP INDEX TESTES_OR.SYS_FK0000022734N00014$;

CREATE INDEX TESTES_OR.SYS_FK0000022734N00014$ ON TESTES_OR.TB_PROFISSIONAIS_VIDEO
(NESTED_TABLE_ID)
LOGGING
TABLESPACE SYSTEM
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


DROP INDEX TESTES_OR.SYS_FK0000022843N00005$;

CREATE INDEX TESTES_OR.SYS_FK0000022843N00005$ ON TESTES_OR.TB_TAGS_VIDEO2
(NESTED_TABLE_ID)
LOGGING
TABLESPACE SYSTEM
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


DROP INDEX TESTES_OR.SYS_FK0000022849N00008$;

CREATE INDEX TESTES_OR.SYS_FK0000022849N00008$ ON TESTES_OR.TB_PROFISSIONAIS_VIDEO2
(NESTED_TABLE_ID)
LOGGING
TABLESPACE SYSTEM
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;
ALTER TABLE TESTES_OR.TB_ENDERECO
 DROP PRIMARY KEY CASCADE;

DROP TABLE TESTES_OR.TB_ENDERECO CASCADE CONSTRAINTS;

CREATE TABLE TESTES_OR.TB_ENDERECO OF TESTES_OR.TP_ENDERECO 
TABLESPACE SYSTEM
PCTUSED    40
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;


ALTER TABLE TESTES_OR.TB_ESTADO
 DROP PRIMARY KEY CASCADE;

DROP TABLE TESTES_OR.TB_ESTADO CASCADE CONSTRAINTS;

CREATE TABLE TESTES_OR.TB_ESTADO OF TESTES_OR.TP_ESTADO 
TABLESPACE SYSTEM
PCTUSED    40
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;


ALTER TABLE TESTES_OR.TB_PROFISSIONAL
 DROP PRIMARY KEY CASCADE;

DROP TABLE TESTES_OR.TB_PROFISSIONAL CASCADE CONSTRAINTS;

CREATE TABLE TESTES_OR.TB_PROFISSIONAL OF TESTES_OR.TP_PROFISSIONAL 
NESTED TABLE VIDEOS STORE AS TB_PROFISSIONAIS_VIDEO2
TABLESPACE SYSTEM
PCTUSED    40
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;


ALTER TABLE TESTES_OR.TB_SITUACAO
 DROP PRIMARY KEY CASCADE;

DROP TABLE TESTES_OR.TB_SITUACAO CASCADE CONSTRAINTS;

CREATE TABLE TESTES_OR.TB_SITUACAO OF TESTES_OR.TP_SITUACAO 
TABLESPACE SYSTEM
PCTUSED    40
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;


ALTER TABLE TESTES_OR.TB_TAG
 DROP PRIMARY KEY CASCADE;

DROP TABLE TESTES_OR.TB_TAG CASCADE CONSTRAINTS;

CREATE TABLE TESTES_OR.TB_TAG OF TESTES_OR.TP_TAG 
NESTED TABLE VIDEO STORE AS TB_TAGS_VIDEO2
TABLESPACE SYSTEM
PCTUSED    40
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;


ALTER TABLE TESTES_OR.TB_TELEFONE
 DROP PRIMARY KEY CASCADE;

DROP TABLE TESTES_OR.TB_TELEFONE CASCADE CONSTRAINTS;

CREATE TABLE TESTES_OR.TB_TELEFONE OF TESTES_OR.TP_TELEFONE 
TABLESPACE SYSTEM
PCTUSED    40
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;


CREATE INDEX TESTES_OR.SYS_FK0000022734N00012$ ON TESTES_OR.TB_TAGS_VIDEO
(NESTED_TABLE_ID)
LOGGING
TABLESPACE SYSTEM
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX TESTES_OR.SYS_FK0000022734N00014$ ON TESTES_OR.TB_PROFISSIONAIS_VIDEO
(NESTED_TABLE_ID)
LOGGING
TABLESPACE SYSTEM
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX TESTES_OR.SYS_FK0000022843N00005$ ON TESTES_OR.TB_TAGS_VIDEO2
(NESTED_TABLE_ID)
LOGGING
TABLESPACE SYSTEM
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


CREATE INDEX TESTES_OR.SYS_FK0000022849N00008$ ON TESTES_OR.TB_PROFISSIONAIS_VIDEO2
(NESTED_TABLE_ID)
LOGGING
TABLESPACE SYSTEM
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;


ALTER TABLE TESTES_OR.TB_EMPRESA
 DROP PRIMARY KEY CASCADE;

DROP TABLE TESTES_OR.TB_EMPRESA CASCADE CONSTRAINTS;

CREATE TABLE TESTES_OR.TB_EMPRESA OF TESTES_OR.TP_EMPRESA 
TABLESPACE SYSTEM
PCTUSED    40
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;


ALTER TABLE TESTES_OR.TB_DEPARTAMENTO
 DROP PRIMARY KEY CASCADE;

DROP TABLE TESTES_OR.TB_DEPARTAMENTO CASCADE CONSTRAINTS;

CREATE TABLE TESTES_OR.TB_DEPARTAMENTO OF TESTES_OR.TP_DEPARTAMENTO 
TABLESPACE SYSTEM
PCTUSED    40
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;


ALTER TABLE TESTES_OR.TB_EDITOR
 DROP PRIMARY KEY CASCADE;

DROP TABLE TESTES_OR.TB_EDITOR CASCADE CONSTRAINTS;

CREATE TABLE TESTES_OR.TB_EDITOR OF TESTES_OR.TP_EDITOR 
TABLESPACE SYSTEM
PCTUSED    40
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;


ALTER TABLE TESTES_OR.TB_LOG
 DROP PRIMARY KEY CASCADE;

DROP TABLE TESTES_OR.TB_LOG CASCADE CONSTRAINTS;

CREATE TABLE TESTES_OR.TB_LOG OF TESTES_OR.TP_LOG 
TABLESPACE SYSTEM
PCTUSED    40
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;


ALTER TABLE TESTES_OR.TB_NORMAL
 DROP PRIMARY KEY CASCADE;

DROP TABLE TESTES_OR.TB_NORMAL CASCADE CONSTRAINTS;

CREATE TABLE TESTES_OR.TB_NORMAL OF TESTES_OR.TP_NORMAL 
TABLESPACE SYSTEM
PCTUSED    40
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;


ALTER TABLE TESTES_OR.TB_VIDEO
 DROP PRIMARY KEY CASCADE;

DROP TABLE TESTES_OR.TB_VIDEO CASCADE CONSTRAINTS;

CREATE TABLE TESTES_OR.TB_VIDEO OF TESTES_OR.TP_VIDEO 
NESTED TABLE TAGS STORE AS TB_TAGS_VIDEO,
NESTED TABLE PROFISSIONAIS STORE AS TB_PROFISSIONAIS_VIDEO
XMLTYPE SITUACAO STORE AS CLOB (
  TABLESPACE SYSTEM
  ENABLE       STORAGE IN ROW
  CHUNK       8192
  RETENTION
  NOCACHE
  LOGGING
  INDEX       (
        TABLESPACE SYSTEM
        STORAGE    (
                    INITIAL          64K
                    NEXT             1M
                    MINEXTENTS       1
                    MAXEXTENTS       UNLIMITED
                    PCTINCREASE      0
                    FREELISTS        1
                    FREELIST GROUPS  1
                    BUFFER_POOL      DEFAULT
                   ))
      STORAGE    (
                  INITIAL          64K
                  NEXT             1M
                  MINEXTENTS       1
                  MAXEXTENTS       UNLIMITED
                  PCTINCREASE      0
                  FREELISTS        1
                  FREELIST GROUPS  1
                  BUFFER_POOL      DEFAULT
                 ))
TABLESPACE SYSTEM
PCTUSED    40
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;


ALTER TABLE TESTES_OR.TB_VIDEO_ANEXO
 DROP PRIMARY KEY CASCADE;

DROP TABLE TESTES_OR.TB_VIDEO_ANEXO CASCADE CONSTRAINTS;

CREATE TABLE TESTES_OR.TB_VIDEO_ANEXO OF TESTES_OR.TP_VIDEO_ANEXO 
XMLTYPE VIDEO STORE AS CLOB (
  TABLESPACE SYSTEM
  ENABLE       STORAGE IN ROW
  CHUNK       8192
  RETENTION
  NOCACHE
  LOGGING
  INDEX       (
        TABLESPACE SYSTEM
        STORAGE    (
                    INITIAL          64K
                    NEXT             1M
                    MINEXTENTS       1
                    MAXEXTENTS       UNLIMITED
                    PCTINCREASE      0
                    FREELISTS        1
                    FREELIST GROUPS  1
                    BUFFER_POOL      DEFAULT
                   ))
      STORAGE    (
                  INITIAL          64K
                  NEXT             1M
                  MINEXTENTS       1
                  MAXEXTENTS       UNLIMITED
                  PCTINCREASE      0
                  FREELISTS        1
                  FREELIST GROUPS  1
                  BUFFER_POOL      DEFAULT
                 ))
TABLESPACE SYSTEM
PCTUSED    40
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;


CREATE OR REPLACE TRIGGER TESTES_OR.LOG_VIDEOS AFTER INSERT OR UPDATE OR DELETE ON TESTES_OR.TB_VIDEO FOR EACH ROW
BEGIN
    IF(INSERTING) THEN
        INSERT INTO TB_LOG ( NID_LOG, DDATA_HORA, VVALOR_ANTERIOR, VACAO, EDITOR) 
            VALUES (SEQ_LOG_ID.NEXTVAL, SYSDATE, NULL , 'CADASTRO', :NEW.EDITOR );

    ELSIF (UPDATING) THEN
        INSERT INTO TB_LOG ( NID_LOG, DDATA_HORA, VVALOR_ANTERIOR, VACAO, EDITOR) 
            VALUES (SEQ_LOG_ID.NEXTVAL, SYSDATE, SUBSTR ('TIT: ' || :OLD.VTITULO || '. DESC: ' || :OLD.VDESCRICAO || '. VER: ' || :OLD.NVERSAO || '. DUR: ' ||:OLD.NDURACAO, 1, 254), 'ATUALIZACAO', :NEW.EDITOR);

    ELSIF (DELETING) THEN
        INSERT INTO TB_LOG ( NID_LOG, DDATA_HORA, VVALOR_ANTERIOR, VACAO, EDITOR) 
            VALUES (SEQ_LOG_ID.NEXTVAL, SYSDATE, SUBSTR ('TIT: ' || :OLD.VTITULO || '. DESC: ' || :OLD.VDESCRICAO || '. VER: ' || :OLD.NVERSAO || '. DUR: ' ||:OLD.NDURACAO, 1, 254), 'EXCLUSAO', :NEW.EDITOR);
    
    END IF;
END;
/


ALTER TABLE TESTES_OR.TB_ADMINISTRADOR
 DROP PRIMARY KEY CASCADE;

DROP TABLE TESTES_OR.TB_ADMINISTRADOR CASCADE CONSTRAINTS;

CREATE TABLE TESTES_OR.TB_ADMINISTRADOR OF TESTES_OR.TP_ADMINISTRADOR 
TABLESPACE SYSTEM
PCTUSED    40
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;


ALTER TABLE TESTES_OR.TB_AUDIO_ANEXO
 DROP PRIMARY KEY CASCADE;

DROP TABLE TESTES_OR.TB_AUDIO_ANEXO CASCADE CONSTRAINTS;

CREATE TABLE TESTES_OR.TB_AUDIO_ANEXO OF TESTES_OR.TP_AUDIO_ANEXO 
XMLTYPE VIDEO STORE AS CLOB (
  TABLESPACE SYSTEM
  ENABLE       STORAGE IN ROW
  CHUNK       8192
  RETENTION
  NOCACHE
  LOGGING
  INDEX       (
        TABLESPACE SYSTEM
        STORAGE    (
                    INITIAL          64K
                    NEXT             1M
                    MINEXTENTS       1
                    MAXEXTENTS       UNLIMITED
                    PCTINCREASE      0
                    FREELISTS        1
                    FREELIST GROUPS  1
                    BUFFER_POOL      DEFAULT
                   ))
      STORAGE    (
                  INITIAL          64K
                  NEXT             1M
                  MINEXTENTS       1
                  MAXEXTENTS       UNLIMITED
                  PCTINCREASE      0
                  FREELISTS        1
                  FREELIST GROUPS  1
                  BUFFER_POOL      DEFAULT
                 ))
TABLESPACE SYSTEM
PCTUSED    40
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;


ALTER TABLE TESTES_OR.TB_DOCUMENTO_ANEXO
 DROP PRIMARY KEY CASCADE;

DROP TABLE TESTES_OR.TB_DOCUMENTO_ANEXO CASCADE CONSTRAINTS;

CREATE TABLE TESTES_OR.TB_DOCUMENTO_ANEXO OF TESTES_OR.TP_DOCUMENTO_ANEXO 
XMLTYPE VIDEO STORE AS CLOB (
  TABLESPACE SYSTEM
  ENABLE       STORAGE IN ROW
  CHUNK       8192
  RETENTION
  NOCACHE
  LOGGING
  INDEX       (
        TABLESPACE SYSTEM
        STORAGE    (
                    INITIAL          64K
                    NEXT             1M
                    MINEXTENTS       1
                    MAXEXTENTS       UNLIMITED
                    PCTINCREASE      0
                    FREELISTS        1
                    FREELIST GROUPS  1
                    BUFFER_POOL      DEFAULT
                   ))
      STORAGE    (
                  INITIAL          64K
                  NEXT             1M
                  MINEXTENTS       1
                  MAXEXTENTS       UNLIMITED
                  PCTINCREASE      0
                  FREELISTS        1
                  FREELIST GROUPS  1
                  BUFFER_POOL      DEFAULT
                 ))
TABLESPACE SYSTEM
PCTUSED    40
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;


ALTER TABLE TESTES_OR.TB_IMAGEM_ANEXO
 DROP PRIMARY KEY CASCADE;

DROP TABLE TESTES_OR.TB_IMAGEM_ANEXO CASCADE CONSTRAINTS;

CREATE TABLE TESTES_OR.TB_IMAGEM_ANEXO OF TESTES_OR.TP_IMAGEM_ANEXO 
XMLTYPE VIDEO STORE AS CLOB (
  TABLESPACE SYSTEM
  ENABLE       STORAGE IN ROW
  CHUNK       8192
  RETENTION
  NOCACHE
  LOGGING
  INDEX       (
        TABLESPACE SYSTEM
        STORAGE    (
                    INITIAL          64K
                    NEXT             1M
                    MINEXTENTS       1
                    MAXEXTENTS       UNLIMITED
                    PCTINCREASE      0
                    FREELISTS        1
                    FREELIST GROUPS  1
                    BUFFER_POOL      DEFAULT
                   ))
      STORAGE    (
                  INITIAL          64K
                  NEXT             1M
                  MINEXTENTS       1
                  MAXEXTENTS       UNLIMITED
                  PCTINCREASE      0
                  FREELISTS        1
                  FREELIST GROUPS  1
                  BUFFER_POOL      DEFAULT
                 ))
TABLESPACE SYSTEM
PCTUSED    40
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCOMPRESS 
NOCACHE
NOPARALLEL
MONITORING;


ALTER TABLE TESTES_OR.TB_ENDERECO ADD (
  PRIMARY KEY
  (NID_ENDERECO)
  USING INDEX
    TABLESPACE SYSTEM
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
               ));

ALTER TABLE TESTES_OR.TB_ESTADO ADD (
  PRIMARY KEY
  (NID_ESTADO)
  USING INDEX
    TABLESPACE SYSTEM
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
               ));

ALTER TABLE TESTES_OR.TB_PROFISSIONAL ADD (
  PRIMARY KEY
  (NID_PROFISSIONAL)
  USING INDEX
    TABLESPACE SYSTEM
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
               ));

ALTER TABLE TESTES_OR.TB_SITUACAO ADD (
  PRIMARY KEY
  (NID_SITUACAO)
  USING INDEX
    TABLESPACE SYSTEM
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
               ));

ALTER TABLE TESTES_OR.TB_TAG ADD (
  PRIMARY KEY
  (NID_TAG)
  USING INDEX
    TABLESPACE SYSTEM
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
               ));

ALTER TABLE TESTES_OR.TB_TELEFONE ADD (
  PRIMARY KEY
  (NID_TELEFONE)
  USING INDEX
    TABLESPACE SYSTEM
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
               ));

ALTER TABLE TESTES_OR.TB_EMPRESA ADD (
  PRIMARY KEY
  (NID_EMPRESA)
  USING INDEX
    TABLESPACE SYSTEM
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
               ));

ALTER TABLE TESTES_OR.TB_DEPARTAMENTO ADD (
  PRIMARY KEY
  (NID_DEPARTAMENTO)
  USING INDEX
    TABLESPACE SYSTEM
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
               ));

ALTER TABLE TESTES_OR.TB_EDITOR ADD (
  PRIMARY KEY
  (NID_USUARIO)
  USING INDEX
    TABLESPACE SYSTEM
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
               ));

ALTER TABLE TESTES_OR.TB_LOG ADD (
  PRIMARY KEY
  (NID_LOG)
  USING INDEX
    TABLESPACE SYSTEM
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
               ));

ALTER TABLE TESTES_OR.TB_NORMAL ADD (
  PRIMARY KEY
  (NID_USUARIO)
  USING INDEX
    TABLESPACE SYSTEM
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
               ));

ALTER TABLE TESTES_OR.TB_VIDEO ADD (
  PRIMARY KEY
  (NID_VIDEO)
  USING INDEX
    TABLESPACE SYSTEM
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
               ));

ALTER TABLE TESTES_OR.TB_VIDEO_ANEXO ADD (
  PRIMARY KEY
  (NID_ANEXO)
  USING INDEX
    TABLESPACE SYSTEM
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
               ));

ALTER TABLE TESTES_OR.TB_ADMINISTRADOR ADD (
  PRIMARY KEY
  (NID_USUARIO)
  USING INDEX
    TABLESPACE SYSTEM
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
               ));

ALTER TABLE TESTES_OR.TB_AUDIO_ANEXO ADD (
  PRIMARY KEY
  (NID_ANEXO)
  USING INDEX
    TABLESPACE SYSTEM
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
               ));

ALTER TABLE TESTES_OR.TB_DOCUMENTO_ANEXO ADD (
  PRIMARY KEY
  (NID_ANEXO)
  USING INDEX
    TABLESPACE SYSTEM
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
               ));

ALTER TABLE TESTES_OR.TB_IMAGEM_ANEXO ADD (
  PRIMARY KEY
  (NID_ANEXO)
  USING INDEX
    TABLESPACE SYSTEM
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
               ));

ALTER TABLE TESTES_OR.TB_EMPRESA ADD (
  FOREIGN KEY ("ENDERECO") 
  REFERENCES TESTES_OR.TB_ENDERECO (SYS_NC_OID$)
  ON DELETE CASCADE);

ALTER TABLE TESTES_OR.TB_DEPARTAMENTO ADD (
  FOREIGN KEY ("EMPRESA") 
  REFERENCES TESTES_OR.TB_EMPRESA (SYS_NC_OID$));

ALTER TABLE TESTES_OR.TB_EDITOR ADD (
  FOREIGN KEY ("DEPARTAMENTO") 
  REFERENCES TESTES_OR.TB_DEPARTAMENTO (SYS_NC_OID$));

ALTER TABLE TESTES_OR.TB_LOG ADD (
  FOREIGN KEY ("EDITOR") 
  REFERENCES TESTES_OR.TB_EDITOR (SYS_NC_OID$));

ALTER TABLE TESTES_OR.TB_NORMAL ADD (
  FOREIGN KEY ("DEPARTAMENTO") 
  REFERENCES TESTES_OR.TB_DEPARTAMENTO (SYS_NC_OID$));

ALTER TABLE TESTES_OR.TB_VIDEO ADD (
  FOREIGN KEY ("SITUACAO") 
  REFERENCES TESTES_OR.TB_SITUACAO (SYS_NC_OID$),
  FOREIGN KEY ("ESTADO") 
  REFERENCES TESTES_OR.TB_ESTADO (SYS_NC_OID$),
  FOREIGN KEY ("EDITOR") 
  REFERENCES TESTES_OR.TB_EDITOR (SYS_NC_OID$));

ALTER TABLE TESTES_OR.TB_VIDEO_ANEXO ADD (
  FOREIGN KEY ("VIDEO") 
  REFERENCES TESTES_OR.TB_VIDEO (SYS_NC_OID$));

ALTER TABLE TESTES_OR.TB_ADMINISTRADOR ADD (
  FOREIGN KEY ("DEPARTAMENTO") 
  REFERENCES TESTES_OR.TB_DEPARTAMENTO (SYS_NC_OID$));

ALTER TABLE TESTES_OR.TB_AUDIO_ANEXO ADD (
  FOREIGN KEY ("VIDEO") 
  REFERENCES TESTES_OR.TB_VIDEO (SYS_NC_OID$));

ALTER TABLE TESTES_OR.TB_DOCUMENTO_ANEXO ADD (
  FOREIGN KEY ("VIDEO") 
  REFERENCES TESTES_OR.TB_VIDEO (SYS_NC_OID$));

ALTER TABLE TESTES_OR.TB_IMAGEM_ANEXO ADD (
  FOREIGN KEY ("VIDEO") 
  REFERENCES TESTES_OR.TB_VIDEO (SYS_NC_OID$));
DROP TYPE TESTES_OR.TP_ENDERECO;

CREATE OR REPLACE TYPE TESTES_OR.TP_ENDERECO AS OBJECT (
        NID_ENDERECO NUMBER,
        VRUA VARCHAR2(50),
        NNUMERO NUMBER,
        VBAIRRO VARCHAR2 (30),
        VCIDADE VARCHAR2(30),
        VESTADO VARCHAR2(30),
        
        MEMBER PROCEDURE CADASTRAR_ENDERECO,
        MEMBER PROCEDURE ATUALIZAR_ENDERECO,
        MEMBER PROCEDURE EXCLUIR_ENDERECO
    );
/


DROP TYPE TESTES_OR.TP_ESTADO;

CREATE OR REPLACE TYPE TESTES_OR.TP_ESTADO AS OBJECT (
    NID_ESTADO NUMBER,
    VNOME VARCHAR2(20),
    
    MEMBER PROCEDURE CADASTRAR_ESTADO,
     MEMBER PROCEDURE ATUALIZAR_ESTADO,
     MEMBER PROCEDURE EXCLUIR_ESTADO
    
    );
/


DROP TYPE TESTES_OR.TP_SITUACAO;

CREATE OR REPLACE TYPE TESTES_OR.TP_SITUACAO AS OBJECT (
    NID_SITUACAO NUMBER,
    VNOME VARCHAR2(20),
    
     MEMBER PROCEDURE CADASTRAR_SITUACAO,
     MEMBER PROCEDURE ATUALIZAR_SITUACAO,
     MEMBER PROCEDURE EXCLUIR_SITUACAO
    
    );
/


DROP TYPE TESTES_OR.TP_TELEFONE;

CREATE OR REPLACE TYPE TESTES_OR.TP_TELEFONE AS OBJECT
(
                     NID_TELEFONE NUMBER,
                     NDDD NUMBER,
                     VTELEFONE VARCHAR2 (10),
                     MEMBER PROCEDURE CADASTRAR_TELEFONE,
                     MEMBER PROCEDURE ATUALIZAR_TELEFONE,
                     MEMBER PROCEDURE EXCLUIR_TELEFONE
)
 ALTER TYPE TP_TELEFONE ADD MAP MEMBER FUNCTION GETID_TELEFONE RETURN NUMBER CASCADE
/


DROP TYPE BODY TESTES_OR.TP_ADMINISTRADOR;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_ADMINISTRADOR
AS
   MEMBER PROCEDURE CADASTRAR_ADMINISTRADOR (ID_DEPARTAMENTO NUMBER)
   IS
   BEGIN
      INSERT INTO TB_ADMINISTRADOR ( NID_USUARIO, VNOME, NMATRICULA, VCARGO, VEMAIL, VLOGIN, VSENHA, CTIPO, DEPARTAMENTO )
           VALUES (
           SELF.NID_USUARIO, SELF.VNOME, SELF.NMATRICULA, SELF.VCARGO, SELF.VEMAIL, SELF.VLOGIN, SELF.VSENHA, SELF.CTIPO, 
           (SELECT REF ( D ) FROM TB_DEPARTAMENTO D WHERE NID_DEPARTAMENTO = ID_DEPARTAMENTO)
           );
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20037, 'Ja existe um usuario administrador com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20038, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   MEMBER PROCEDURE ATUALIZAR_ADMINISTRADOR (ID_DEPARTAMENTO NUMBER)
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_ADMINISTRADOR
         SET  VNOME = SELF.VNOME, NMATRICULA = SELF.NMATRICULA, VCARGO = SELF.VCARGO, VEMAIL = SELF.VEMAIL, 
         VLOGIN = SELF.VLOGIN, VSENHA = SELF.VSENHA, CTIPO = SELF.CTIPO, 
         DEPARTAMENTO = (SELECT REF ( D ) FROM TB_DEPARTAMENTO D WHERE NID_DEPARTAMENTO = ID_DEPARTAMENTO)
       WHERE NID_USUARIO = SELF.NID_USUARIO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20039, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20040, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
   MEMBER PROCEDURE EXCLUIR_ADMINISTRADOR
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_ADMINISTRADOR
            WHERE NID_USUARIO = SELF.NID_USUARIO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20041, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20042, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

END;
/


DROP TYPE BODY TESTES_OR.TP_AUDIO_ANEXO;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_AUDIO_ANEXO
AS
   MEMBER PROCEDURE CADASTRAR_AUDIO_ANEXO (ID_VIDEO NUMBER)
   IS
   BEGIN
      INSERT INTO TB_AUDIO_ANEXO ( NID_ANEXO, VNOME, VDESCRICAO, CTIPO, VEXTENSAO, BANEXO, NDURACAO, VIDEO)
           VALUES (
           SELF.NID_ANEXO, SELF.VNOME, SELF.VDESCRICAO, SELF.CTIPO, SELF.VEXTENSAO, SELF.BANEXO, 
           SELF.NDURACAO, (SELECT REF (V) FROM TB_VIDEO V WHERE NID_VIDEO = ID_VIDEO)
           );
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20061, 'Ja existe um audio anexo com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20062, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   MEMBER PROCEDURE ATUALIZAR_AUDIO_ANEXO (ID_VIDEO NUMBER)
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_AUDIO_ANEXO
         SET VNOME = SELF.VNOME, VDESCRICAO = SELF.VDESCRICAO, CTIPO = SELF.CTIPO,
                VEXTENSAO = VEXTENSAO, BANEXO = SELF.BANEXO, NDURACAO = SELF.NDURACAO,
                VIDEO = (SELECT REF (V) FROM TB_VIDEO V WHERE NID_VIDEO = ID_VIDEO)
       WHERE NID_ANEXO = SELF.NID_ANEXO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20063, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20054, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
   MEMBER PROCEDURE EXCLUIR_AUDIO_ANEXO
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_AUDIO_ANEXO
            WHERE NID_ANEXO = SELF.NID_ANEXO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20065, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20066, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

END;
/


DROP TYPE BODY TESTES_OR.TP_DEPARTAMENTO;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_DEPARTAMENTO
AS
   MEMBER PROCEDURE CADASTRAR_DEPARTAMENTO (ID_EMPRESA NUMBER)
   IS
   BEGIN
      INSERT INTO TB_DEPARTAMENTO ( NID_DEPARTAMENTO, VNOME, VAREA, EMPRESA )
           VALUES (
           SELF.NID_DEPARTAMENTO, SELF.VNOME, SELF.VAREA, 
           (SELECT REF ( E ) FROM TB_EMPRESA E WHERE NID_EMPRESA = ID_EMPRESA)
           );
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20019, 'Ja existe um departamento com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20020, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   MEMBER PROCEDURE ATUALIZAR_DEPARTAMENTO (ID_EMPRESA NUMBER)
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_DEPARTAMENTO
         SET VNOME = SELF.VNOME, VAREA = SELF.VAREA, 
         EMPRESA = (SELECT REF ( E ) FROM TB_EMPRESA E WHERE NID_EMPRESA = ID_EMPRESA)
       WHERE NID_DEPARTAMENTO= SELF.NID_DEPARTAMENTO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20021, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20022, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
   MEMBER PROCEDURE EXCLUIR_DEPARTAMENTO
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_DEPARTAMENTO
            WHERE NID_DEPARTAMENTO = SELF.NID_DEPARTAMENTO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20023, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20024, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

END;
/


DROP TYPE BODY TESTES_OR.TP_DOCUMENTO_ANEXO;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_DOCUMENTO_ANEXO
AS
   MEMBER PROCEDURE CADASTRAR_DOCUMENTO_ANEXO (ID_VIDEO NUMBER)
   IS
   BEGIN
      INSERT INTO TB_DOCUMENTO_ANEXO ( NID_ANEXO, VNOME, VDESCRICAO, CTIPO, VEXTENSAO, BANEXO,  NNUM_PAGINAS, VIDEO)
           VALUES (
           SELF.NID_ANEXO, SELF.VNOME, SELF.VDESCRICAO, SELF.CTIPO, SELF.VEXTENSAO, SELF.BANEXO, SELF.NNUM_PAGINAS,
           (SELECT REF (V) FROM TB_VIDEO V WHERE NID_VIDEO = ID_VIDEO)
           );
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20067, 'Ja existe um documento anexo com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20068, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   MEMBER PROCEDURE ATUALIZAR_DOCUMENTO_ANEXO (ID_VIDEO NUMBER)
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_DOCUMENTO_ANEXO
         SET VNOME = SELF.VNOME, VDESCRICAO = SELF.VDESCRICAO, CTIPO = SELF.CTIPO,
                VEXTENSAO = VEXTENSAO, BANEXO = SELF.BANEXO, NNUM_PAGINAS = SELF.NNUM_PAGINAS,
                VIDEO = (SELECT REF (V) FROM TB_VIDEO V WHERE NID_VIDEO = ID_VIDEO)
       WHERE NID_ANEXO = SELF.NID_ANEXO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20069, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20070, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
   MEMBER PROCEDURE EXCLUIR_DOCUMENTO_ANEXO
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_DOCUMENTO_ANEXO
            WHERE NID_ANEXO = SELF.NID_ANEXO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20071, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20072, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

END;
/


DROP TYPE BODY TESTES_OR.TP_EDITOR;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_EDITOR
AS
   MEMBER PROCEDURE CADASTRAR_EDITOR (ID_DEPARTAMENTO NUMBER)
   IS
   BEGIN
      INSERT INTO TB_EDITOR ( NID_USUARIO, VNOME, NMATRICULA, VCARGO, VEMAIL, VLOGIN, VSENHA, CTIPO, DEPARTAMENTO )
           VALUES (
           SELF.NID_USUARIO, SELF.VNOME, SELF.NMATRICULA, SELF.VCARGO, SELF.VEMAIL, SELF.VLOGIN, SELF.VSENHA, SELF.CTIPO, 
           (SELECT REF ( D ) FROM TB_DEPARTAMENTO D WHERE NID_DEPARTAMENTO = ID_DEPARTAMENTO)
           );
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20025, 'Ja existe um editor com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20026, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   MEMBER PROCEDURE ATUALIZAR_EDITOR (ID_DEPARTAMENTO NUMBER)
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_EDITOR
         SET  VNOME = SELF.VNOME, NMATRICULA = SELF.NMATRICULA, VCARGO = SELF.VCARGO, VEMAIL = SELF.VEMAIL, 
         VLOGIN = SELF.VLOGIN, VSENHA = SELF.VSENHA, CTIPO = SELF.CTIPO, 
         DEPARTAMENTO = (SELECT REF ( D ) FROM TB_DEPARTAMENTO D WHERE NID_DEPARTAMENTO = ID_DEPARTAMENTO)
       WHERE NID_USUARIO = SELF.NID_USUARIO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20027, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20028, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
   MEMBER PROCEDURE EXCLUIR_EDITOR
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_EDITOR
            WHERE NID_USUARIO = SELF.NID_USUARIO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20029, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20030, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

END;
/


DROP TYPE BODY TESTES_OR.TP_EMPRESA;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_EMPRESA
AS
   MEMBER PROCEDURE CADASTRAR_EMPRESA ( ID_ENDERECO NUMBER, ID_TEL1 NUMBER, ID_TEL2 NUMBER)
   IS
   BEGIN
      INSERT INTO TB_EMPRESA ( NID_EMPRESA, VCNPJ, VRAZAO_SOCIAL, VEMAIL, VSITE, ENDERECO, TELEFONES )
           VALUES (
           SELF.NID_EMPRESA, SELF.VCNPJ, SELF.VRAZAO_SOCIAL, SELF.VEMAIL, SELF.VSITE, 
           (SELECT REF ( E ) FROM TB_ENDERECO E WHERE NID_ENDERECO = ID_ENDERECO),
           TP_VARR_TELEFONES (
                                            (SELECT REF (T)  FROM TB_TELEFONE T WHERE NID_TELEFONE = ID_TEL1),
                                            (SELECT REF (T)  FROM TB_TELEFONE T WHERE NID_TELEFONE = ID_TEL2)
                                     )
           );
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20013, 'Ja existe uma empresa com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20014, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   MEMBER PROCEDURE ATUALIZAR_EMPRESA ( ID_ENDERECO NUMBER, ID_TEL1 NUMBER, ID_TEL2 NUMBER)
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_EMPRESA
         SET VCNPJ = SELF.VCNPJ, VRAZAO_SOCIAL = SELF.VRAZAO_SOCIAL, VEMAIL = SELF.VEMAIL, VSITE = SELF.VSITE,
         ENDERECO = (SELECT REF (E) FROM TB_ENDERECO E WHERE NID_ENDERECO = ID_ENDERECO),
         TELEFONES = TP_VARR_TELEFONES (
                                            (SELECT REF (T)  FROM TB_TELEFONE T WHERE NID_TELEFONE = ID_TEL1),
                                            (SELECT REF (T)  FROM TB_TELEFONE T WHERE NID_TELEFONE = ID_TEL2)
                                     )
       WHERE NID_EMPRESA = SELF.NID_EMPRESA;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20015, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20016, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
   MEMBER PROCEDURE EXCLUIR_EMPRESA
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_EMPRESA
            WHERE NID_EMPRESA = SELF.NID_EMPRESA;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20017, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20018, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

END;
/


DROP TYPE BODY TESTES_OR.TP_ENDERECO;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_ENDERECO
AS
   MEMBER PROCEDURE CADASTRAR_ENDERECO 
   IS
   BEGIN
      INSERT INTO TB_ENDERECO ( NID_ENDERECO, VRUA, NNUMERO, VBAIRRO, VCIDADE, VESTADO)
           VALUES (SELF.NID_ENDERECO, SELF.VRUA, SELF.NNUMERO, SELF.VBAIRRO, SELF.VCIDADE, SELF.VESTADO);
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20007, 'Ja existe um endereco com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20008, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   MEMBER PROCEDURE ATUALIZAR_ENDERECO 
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_ENDERECO
         SET VRUA = SELF.VRUA, NNUMERO = SELF.NNUMERO, VBAIRRO = SELF.VBAIRRO, VCIDADE = SELF.VCIDADE, VESTADO = SELF.VESTADO
       WHERE NID_ENDERECO = SELF.NID_ENDERECO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20009, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20010, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
   MEMBER PROCEDURE EXCLUIR_ENDERECO
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_ENDERECO
            WHERE NID_ENDERECO = SELF.NID_ENDERECO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20011, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20012, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

END;
/


DROP TYPE BODY TESTES_OR.TP_ESTADO;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_ESTADO
AS
   MEMBER PROCEDURE CADASTRAR_ESTADO
   IS
   BEGIN
      INSERT INTO TB_ESTADO (NID_ESTADO, VNOME)
           VALUES (SELF.NID_ESTADO, SELF.VNOME);
      COMMIT;
    EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20049, 'Ja existe um estado com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20050, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   MEMBER PROCEDURE ATUALIZAR_ESTADO
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_ESTADO
         SET VNOME = SELF.VNOME
       WHERE NID_ESTADO = SELF.NID_ESTADO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20051, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20052, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
 MEMBER PROCEDURE EXCLUIR_ESTADO
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_ESTADO
            WHERE NID_ESTADO = SELF.NID_ESTADO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20053, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20054, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

    
END;
/


DROP TYPE BODY TESTES_OR.TP_IMAGEM_ANEXO;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_IMAGEM_ANEXO
AS
   MEMBER PROCEDURE CADASTRAR_IMAGEM_ANEXO (ID_VIDEO NUMBER)
   IS
   BEGIN
      INSERT INTO TB_IMAGEM_ANEXO ( NID_ANEXO, VNOME, VDESCRICAO, CTIPO, VEXTENSAO, BANEXO,  VRESOLUCAO, VIDEO)
           VALUES (
           SELF.NID_ANEXO, SELF.VNOME, SELF.VDESCRICAO, SELF.CTIPO, SELF.VEXTENSAO, SELF.BANEXO, SELF.VRESOLUCAO,
           (SELECT REF (V) FROM TB_VIDEO V WHERE NID_VIDEO = ID_VIDEO)
           );
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20073, 'Ja existe uma imagem em anexo com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20074, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   MEMBER PROCEDURE ATUALIZAR_IMAGEM_ANEXO (ID_VIDEO NUMBER)
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_IMAGEM_ANEXO
         SET VNOME = SELF.VNOME, VDESCRICAO = SELF.VDESCRICAO, CTIPO = SELF.CTIPO,
                VEXTENSAO = VEXTENSAO, BANEXO = SELF.BANEXO, VRESOLUCAO = SELF.VRESOLUCAO,
                VIDEO = (SELECT REF (V) FROM TB_VIDEO V WHERE NID_VIDEO = ID_VIDEO)
       WHERE NID_ANEXO = SELF.NID_ANEXO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20075, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20076, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
   MEMBER PROCEDURE EXCLUIR_IMAGEM_ANEXO
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_IMAGEM_ANEXO
            WHERE NID_ANEXO = SELF.NID_ANEXO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20077, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20078, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

END;
/


DROP TYPE BODY TESTES_OR.TP_NORMAL;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_NORMAL
AS
   MEMBER PROCEDURE CADASTRAR_NORMAL (ID_DEPARTAMENTO NUMBER)
   IS
   BEGIN
      INSERT INTO TB_NORMAL ( NID_USUARIO, VNOME, NMATRICULA, VCARGO, VEMAIL, VLOGIN, VSENHA, CTIPO, DEPARTAMENTO )
           VALUES (
           SELF.NID_USUARIO, SELF.VNOME, SELF.NMATRICULA, SELF.VCARGO, SELF.VEMAIL, SELF.VLOGIN, SELF.VSENHA, SELF.CTIPO, 
           (SELECT REF ( D ) FROM TB_DEPARTAMENTO D WHERE NID_DEPARTAMENTO = ID_DEPARTAMENTO)
           );
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20031, 'Ja existe um usuario normal com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20032, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   MEMBER PROCEDURE ATUALIZAR_NORMAL (ID_DEPARTAMENTO NUMBER)
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_NORMAL
         SET  VNOME = SELF.VNOME, NMATRICULA = SELF.NMATRICULA, VCARGO = SELF.VCARGO, VEMAIL = SELF.VEMAIL, 
         VLOGIN = SELF.VLOGIN, VSENHA = SELF.VSENHA, CTIPO = SELF.CTIPO, 
         DEPARTAMENTO = (SELECT REF ( D ) FROM TB_DEPARTAMENTO D WHERE NID_DEPARTAMENTO = ID_DEPARTAMENTO)
       WHERE NID_USUARIO = SELF.NID_USUARIO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20033, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20034, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
   MEMBER PROCEDURE EXCLUIR_NORMAL
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_NORMAL
            WHERE NID_USUARIO = SELF.NID_USUARIO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20035, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20036, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

END;
/


DROP TYPE BODY TESTES_OR.TP_SITUACAO;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_SITUACAO
AS
   MEMBER PROCEDURE CADASTRAR_SITUACAO 
   IS
   BEGIN
      INSERT INTO TB_SITUACAO (NID_SITUACAO, VNOME)
           VALUES (SELF.NID_SITUACAO, SELF.VNOME);
      COMMIT;
    EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20043, 'Ja existe uma situacao com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20044, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   MEMBER PROCEDURE ATUALIZAR_SITUACAO
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_SITUACAO
         SET VNOME = SELF.VNOME
       WHERE NID_SITUACAO = SELF.NID_SITUACAO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20045, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20046, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
 MEMBER PROCEDURE EXCLUIR_SITUACAO
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_SITUACAO
            WHERE NID_SITUACAO = SELF.NID_SITUACAO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20047, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20048, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

    
END;
/


DROP TYPE BODY TESTES_OR.TP_TELEFONE;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_TELEFONE
AS
   MEMBER PROCEDURE CADASTRAR_TELEFONE 
   IS
   BEGIN
      INSERT INTO TB_TELEFONE (NID_TELEFONE, NDDD, VTELEFONE)
           VALUES (SELF.NID_TELEFONE, SELF.NDDD, SELF.VTELEFONE);
      COMMIT;
    EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20001, 'Ja existe um telefone com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20002, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   MEMBER PROCEDURE ATUALIZAR_TELEFONE
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_TELEFONE
         SET NDDD = SELF.NDDD, VTELEFONE = SELF.VTELEFONE
       WHERE NID_TELEFONE = SELF.NID_TELEFONE;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20003, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20004, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
 MEMBER PROCEDURE EXCLUIR_TELEFONE
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_TELEFONE
            WHERE NID_TELEFONE = SELF.NID_TELEFONE;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20005, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20006, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

   MAP MEMBER FUNCTION GETID_TELEFONE RETURN NUMBER IS
    BEGIN
            RETURN SELF.NID_TELEFONE;
    END;
END;
/


DROP TYPE BODY TESTES_OR.TP_VIDEO;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_VIDEO
AS
   MEMBER PROCEDURE CADASTRAR_VIDEO ( ID_SITUACAO NUMBER, ID_ESTADO NUMBER, ID_TAGS NUMBER, ID_PROFISSIONAIS NUMBER, ID_EDITOR NUMBER)
   IS
   BEGIN
      INSERT INTO TB_VIDEO (NID_VIDEO, VTITULO, VDESCRICAO, NVERSAO, VTIPO, NDURACAO, BVIDEO, SITUACAO, ESTADO, TAGS, PROFISSIONAIS, EDITOR )
           VALUES (
           SELF.NID_VIDEO, SELF.VTITULO, SELF.VDESCRICAO, SELF.NVERSAO, SELF.VTIPO, SELF.NDURACAO, SELF.BVIDEO, 
           (SELECT REF ( S ) FROM TB_SITUACAO S WHERE NID_SITUACAO = ID_SITUACAO),
           (SELECT REF ( E ) FROM TB_ESTADO E WHERE NID_ESTADO = ID_ESTADO),
           NT_TAGS ( (SELECT REF ( T ) FROM TB_TAG T WHERE NID_TAG = ID_TAGS) ),
           NT_PROFISSIONAIS ((SELECT REF ( P ) FROM TB_PROFISSIONAL P WHERE NID_PROFISSIONAL = ID_PROFISSIONAIS) ),
           (SELECT REF ( E ) FROM TB_EDITOR E WHERE NID_USUARIO = ID_EDITOR)
           );
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20079, 'Ja existe uma video com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20080, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   END;
/


DROP TYPE BODY TESTES_OR.TP_VIDEO_ANEXO;

CREATE OR REPLACE TYPE BODY TESTES_OR.TP_VIDEO_ANEXO
AS
   MEMBER PROCEDURE CADASTRAR_VIDEO_ANEXO (ID_VIDEO NUMBER)
   IS
   BEGIN
      INSERT INTO TB_VIDEO_ANEXO ( NID_ANEXO, VNOME, VDESCRICAO, CTIPO, VEXTENSAO, BANEXO,  VRESOLUCAO, NDURACAO, VIDEO)
           VALUES (
           SELF.NID_ANEXO, SELF.VNOME, SELF.VDESCRICAO, SELF.CTIPO, SELF.VEXTENSAO, SELF.BANEXO,  SELF.VRESOLUCAO, SELF.NDURACAO, 
           (SELECT REF (V) FROM TB_VIDEO V WHERE NID_VIDEO = ID_VIDEO)
           );
      COMMIT;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX
      THEN
         RAISE_APPLICATION_ERROR (
            -20055, 'Ja existe um video anexo com o codigo especificado');
          WHEN OTHERS 
          THEN
            RAISE_APPLICATION_ERROR (
            -20056, 'Ocorreu um erro no cadastro. Favor, tentar novamente.');                
   END;
   
   MEMBER PROCEDURE ATUALIZAR_VIDEO_ANEXO (ID_VIDEO NUMBER)
   IS
   ATUALIZOU CHAR(1) := 'N';
   ERRO_AO_ATUALIZAR EXCEPTION;
   
   BEGIN
      UPDATE TB_VIDEO_ANEXO
         SET VNOME = SELF.VNOME, VDESCRICAO = SELF.VDESCRICAO, CTIPO = SELF.CTIPO,
                VEXTENSAO = VEXTENSAO, BANEXO = SELF.BANEXO,  VRESOLUCAO = SELF.VRESOLUCAO, NDURACAO = SELF.NDURACAO,
                VIDEO = (SELECT REF (V) FROM TB_VIDEO V WHERE NID_VIDEO = ID_VIDEO)
       WHERE NID_ANEXO = SELF.NID_ANEXO;
      COMMIT;
      ATUALIZOU := 'S';
      
      IF (ATUALIZOU = 'N') THEN 
        RAISE ERRO_AO_ATUALIZAR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_ATUALIZAR THEN 
            RAISE_APPLICATION_ERROR ( -20057, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20058, 'Ocorreu um erro na atualizacao. Favor, tentar novamente.');
   END;
  
   MEMBER PROCEDURE EXCLUIR_VIDEO_ANEXO
   IS
   EXCLUIU                  CHAR (1) := 'N';
   ERRO_AO_EXCLUIR  EXCEPTION;
   BEGIN
      DELETE FROM TB_VIDEO_ANEXO
            WHERE NID_ANEXO = SELF.NID_ANEXO;
      COMMIT;
      EXCLUIU := 'S';
      IF (EXCLUIU = 'N')
      THEN
         RAISE ERRO_AO_EXCLUIR;
      END IF;
      
      EXCEPTION
      WHEN ERRO_AO_EXCLUIR THEN 
          RAISE_APPLICATION_ERROR ( -20059, 'A operacao nao foi confirmada. Favor, tentar novamente.');
      WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR ( -20060, 'Ocorreu um erro na exclusao. Favor, tentar novamente.');
   END;

END;
/


DROP TYPE TESTES_OR.TP_EMPRESA;

CREATE OR REPLACE TYPE TESTES_OR.TP_EMPRESA AS OBJECT (
        NID_EMPRESA NUMBER,
        VCNPJ VARCHAR2(16),
        VRAZAO_SOCIAL VARCHAR2(30),
        VEMAIL VARCHAR2(30),
        VSITE VARCHAR2(30),
        ENDERECO REF TP_ENDERECO,
        TELEFONES TP_VARR_TELEFONES,

        
        MEMBER PROCEDURE CADASTRAR_EMPRESA (ID_ENDERECO NUMBER, ID_TEL1 NUMBER, ID_TEL2 NUMBER),
        MEMBER PROCEDURE ATUALIZAR_EMPRESA (ID_ENDERECO NUMBER, ID_TEL1 NUMBER, ID_TEL2 NUMBER),
        MEMBER PROCEDURE EXCLUIR_EMPRESA
    )   ;
/


DROP TYPE TESTES_OR.TP_DEPARTAMENTO;

CREATE OR REPLACE TYPE TESTES_OR.TP_DEPARTAMENTO AS OBJECT (
    NID_DEPARTAMENTO NUMBER,
    VNOME VARCHAR2(30),
    VAREA VARCHAR2(30),
    EMPRESA REF TP_EMPRESA,
    
    MEMBER PROCEDURE CADASTRAR_DEPARTAMENTO (ID_EMPRESA NUMBER),
    MEMBER PROCEDURE ATUALIZAR_DEPARTAMENTO (ID_EMPRESA NUMBER),
    MEMBER PROCEDURE EXCLUIR_DEPARTAMENTO
);
/


DROP TYPE TESTES_OR.TP_EDITOR;

CREATE OR REPLACE TYPE TESTES_OR.TP_EDITOR UNDER TP_USUARIO  
(               
    MEMBER PROCEDURE CADASTRAR_EDITOR (ID_DEPARTAMENTO NUMBER),
    MEMBER PROCEDURE ATUALIZAR_EDITOR (ID_DEPARTAMENTO NUMBER),
    MEMBER PROCEDURE EXCLUIR_EDITOR
);
/


DROP TYPE TESTES_OR.TP_NORMAL;

CREATE OR REPLACE TYPE TESTES_OR.TP_NORMAL UNDER TP_USUARIO  
(               
    MEMBER PROCEDURE CADASTRAR_NORMAL (ID_DEPARTAMENTO NUMBER),
    MEMBER PROCEDURE ATUALIZAR_NORMAL (ID_DEPARTAMENTO NUMBER),
    MEMBER PROCEDURE EXCLUIR_NORMAL
);
/


DROP TYPE TESTES_OR.TP_VIDEO;

CREATE OR REPLACE TYPE TESTES_OR.TP_VIDEO AS OBJECT (
    NID_VIDEO NUMBER,
    VTITULO VARCHAR2(50),
    VDESCRICAO VARCHAR2(255),
    NVERSAO NUMBER,
    VTIPO VARCHAR2(20),
    NDURACAO NUMBER,
    BVIDEO BLOB,
    SITUACAO REF TP_SITUACAO,
    ESTADO REF TP_ESTADO,
    TAGS  NT_TAGS,
    PROFISSIONAIS NT_PROFISSIONAIS,
    EDITOR REF TP_EDITOR,
    
    MEMBER PROCEDURE CADASTRAR_VIDEO ( ID_SITUACAO NUMBER, ID_ESTADO NUMBER, ID_TAGS NUMBER, ID_PROFISSIONAIS NUMBER, ID_EDITOR NUMBER)--,
    --MEMBER PROCEDURE ATUALIZAR_VIDEO (ID_ENDERECO NUMBER, ID_TEL1 NUMBER, ID_TEL2 NUMBER),
    --MEMBER PROCEDURE EXCLUIR_VIDEO
);
/


DROP TYPE TESTES_OR.TP_VIDEO_ANEXO;

CREATE OR REPLACE TYPE TESTES_OR.TP_VIDEO_ANEXO UNDER TP_ANEXO (
    VRESOLUCAO VARCHAR2(20),
    NDURACAO NUMBER,
    
    MEMBER PROCEDURE CADASTRAR_VIDEO_ANEXO (ID_VIDEO NUMBER),
    MEMBER PROCEDURE ATUALIZAR_VIDEO_ANEXO (ID_VIDEO NUMBER),
    MEMBER PROCEDURE EXCLUIR_VIDEO_ANEXO
    
);
/


DROP TYPE TESTES_OR.TP_ADMINISTRADOR;

CREATE OR REPLACE TYPE TESTES_OR.TP_ADMINISTRADOR UNDER TP_USUARIO  
(               
    MEMBER PROCEDURE CADASTRAR_ADMINISTRADOR (ID_DEPARTAMENTO NUMBER),
    MEMBER PROCEDURE ATUALIZAR_ADMINISTRADOR (ID_DEPARTAMENTO NUMBER),
    MEMBER PROCEDURE EXCLUIR_ADMINISTRADOR
);
/


DROP TYPE TESTES_OR.TP_AUDIO_ANEXO;

CREATE OR REPLACE TYPE TESTES_OR.TP_AUDIO_ANEXO UNDER TP_ANEXO (
    NDURACAO NUMBER,
    
    MEMBER PROCEDURE CADASTRAR_AUDIO_ANEXO (ID_VIDEO NUMBER),
    MEMBER PROCEDURE ATUALIZAR_AUDIO_ANEXO (ID_VIDEO NUMBER),
    MEMBER PROCEDURE EXCLUIR_AUDIO_ANEXO
    
);
/


DROP TYPE TESTES_OR.TP_DOCUMENTO_ANEXO;

CREATE OR REPLACE TYPE TESTES_OR.TP_DOCUMENTO_ANEXO UNDER TP_ANEXO (
    NNUM_PAGINAS NUMBER,
    
    MEMBER PROCEDURE CADASTRAR_DOCUMENTO_ANEXO (ID_VIDEO NUMBER),
    MEMBER PROCEDURE ATUALIZAR_DOCUMENTO_ANEXO (ID_VIDEO NUMBER),
    MEMBER PROCEDURE EXCLUIR_DOCUMENTO_ANEXO
    
);
/


DROP TYPE TESTES_OR.TP_IMAGEM_ANEXO;

CREATE OR REPLACE TYPE TESTES_OR.TP_IMAGEM_ANEXO UNDER TP_ANEXO (
    VRESOLUCAO VARCHAR2(20),
    
    MEMBER PROCEDURE CADASTRAR_IMAGEM_ANEXO (ID_VIDEO NUMBER),
    MEMBER PROCEDURE ATUALIZAR_IMAGEM_ANEXO (ID_VIDEO NUMBER),
    MEMBER PROCEDURE EXCLUIR_IMAGEM_ANEXO
    
);
/
ALTER TABLE TESTES_OR.TB_ADMINISTRADOR
  DROP CONSTRAINT SYS_C007423;

ALTER TABLE TESTES_OR.TB_ADMINISTRADOR MODIFY 
  VLOGIN NULL;

ALTER TABLE TESTES_OR.TB_ADMINISTRADOR MODIFY 
  VSENHA NULL;

ALTER TABLE TESTES_OR.TB_ADMINISTRADOR MODIFY 
  CTIPO NULL;

ALTER TABLE TESTES_OR.TB_ADMINISTRADOR
  DROP CONSTRAINT SYS_C007421;

ALTER TABLE TESTES_OR.TB_ADMINISTRADOR
  DROP CONSTRAINT SYS_C007422;

ALTER TABLE TESTES_OR.TB_ADMINISTRADOR ADD (
  VLOGIN NOT NULL,
  VSENHA NOT NULL,
  CTIPO NOT NULL,
  PRIMARY KEY
  (NID_USUARIO));

ALTER TABLE TESTES_OR.TB_AUDIO_ANEXO
  DROP CONSTRAINT SYS_C007447;

ALTER TABLE TESTES_OR.TB_AUDIO_ANEXO MODIFY 
  CTIPO NULL;

ALTER TABLE TESTES_OR.TB_AUDIO_ANEXO MODIFY 
  BANEXO NULL;

ALTER TABLE TESTES_OR.TB_AUDIO_ANEXO
  DROP CONSTRAINT SYS_C007445;

ALTER TABLE TESTES_OR.TB_AUDIO_ANEXO
  DROP CONSTRAINT SYS_C007446;

ALTER TABLE TESTES_OR.TB_AUDIO_ANEXO ADD (
  CTIPO NOT NULL,
  BANEXO NOT NULL,
  PRIMARY KEY
  (NID_ANEXO));

ALTER TABLE TESTES_OR.TB_DOCUMENTO_ANEXO
  DROP CONSTRAINT SYS_C007453;

ALTER TABLE TESTES_OR.TB_DOCUMENTO_ANEXO MODIFY 
  CTIPO NULL;

ALTER TABLE TESTES_OR.TB_DOCUMENTO_ANEXO MODIFY 
  BANEXO NULL;

ALTER TABLE TESTES_OR.TB_DOCUMENTO_ANEXO
  DROP CONSTRAINT SYS_C007451;

ALTER TABLE TESTES_OR.TB_DOCUMENTO_ANEXO
  DROP CONSTRAINT SYS_C007452;

ALTER TABLE TESTES_OR.TB_DOCUMENTO_ANEXO ADD (
  CTIPO NOT NULL,
  BANEXO NOT NULL,
  PRIMARY KEY
  (NID_ANEXO));

ALTER TABLE TESTES_OR.TB_EDITOR
  DROP CONSTRAINT SYS_C007411;

ALTER TABLE TESTES_OR.TB_EDITOR MODIFY 
  VLOGIN NULL;

ALTER TABLE TESTES_OR.TB_EDITOR MODIFY 
  VSENHA NULL;

ALTER TABLE TESTES_OR.TB_EDITOR MODIFY 
  CTIPO NULL;

ALTER TABLE TESTES_OR.TB_EDITOR
  DROP CONSTRAINT SYS_C007409;

ALTER TABLE TESTES_OR.TB_EDITOR
  DROP CONSTRAINT SYS_C007410;

ALTER TABLE TESTES_OR.TB_EDITOR ADD (
  VLOGIN NOT NULL,
  VSENHA NOT NULL,
  CTIPO NOT NULL,
  PRIMARY KEY
  (NID_USUARIO));

ALTER TABLE TESTES_OR.TB_IMAGEM_ANEXO
  DROP CONSTRAINT SYS_C007459;

ALTER TABLE TESTES_OR.TB_IMAGEM_ANEXO MODIFY 
  CTIPO NULL;

ALTER TABLE TESTES_OR.TB_IMAGEM_ANEXO MODIFY 
  BANEXO NULL;

ALTER TABLE TESTES_OR.TB_IMAGEM_ANEXO
  DROP CONSTRAINT SYS_C007457;

ALTER TABLE TESTES_OR.TB_IMAGEM_ANEXO
  DROP CONSTRAINT SYS_C007458;

ALTER TABLE TESTES_OR.TB_IMAGEM_ANEXO ADD (
  CTIPO NOT NULL,
  BANEXO NOT NULL,
  PRIMARY KEY
  (NID_ANEXO));

ALTER TABLE TESTES_OR.TB_NORMAL
  DROP CONSTRAINT SYS_C007417;

ALTER TABLE TESTES_OR.TB_NORMAL MODIFY 
  VLOGIN NULL;

ALTER TABLE TESTES_OR.TB_NORMAL MODIFY 
  VSENHA NULL;

ALTER TABLE TESTES_OR.TB_NORMAL MODIFY 
  CTIPO NULL;

ALTER TABLE TESTES_OR.TB_NORMAL
  DROP CONSTRAINT SYS_C007415;

ALTER TABLE TESTES_OR.TB_NORMAL
  DROP CONSTRAINT SYS_C007416;

ALTER TABLE TESTES_OR.TB_NORMAL ADD (
  VLOGIN NOT NULL,
  VSENHA NOT NULL,
  CTIPO NOT NULL,
  PRIMARY KEY
  (NID_USUARIO));

ALTER TABLE TESTES_OR.TB_VIDEO
  DROP CONSTRAINT SYS_C007433;

ALTER TABLE TESTES_OR.TB_VIDEO
  DROP CONSTRAINT SYS_C007434;

ALTER TABLE TESTES_OR.TB_VIDEO
  DROP CONSTRAINT SYS_C007435;

ALTER TABLE TESTES_OR.TB_VIDEO MODIFY 
  BVIDEO NULL;

ALTER TABLE TESTES_OR.TB_VIDEO
  DROP CONSTRAINT SYS_C007429;

ALTER TABLE TESTES_OR.TB_VIDEO
  DROP CONSTRAINT SYS_C007430;

ALTER TABLE TESTES_OR.TB_VIDEO
  DROP CONSTRAINT SYS_C007431;

ALTER TABLE TESTES_OR.TB_VIDEO
  DROP CONSTRAINT SYS_C007432;

ALTER TABLE TESTES_OR.TB_VIDEO ADD (
  BVIDEO NOT NULL,
  PRIMARY KEY
  (NID_VIDEO));

ALTER TABLE TESTES_OR.TB_VIDEO_ANEXO
  DROP CONSTRAINT SYS_C007441;

ALTER TABLE TESTES_OR.TB_VIDEO_ANEXO MODIFY 
  CTIPO NULL;

ALTER TABLE TESTES_OR.TB_VIDEO_ANEXO MODIFY 
  BANEXO NULL;

ALTER TABLE TESTES_OR.TB_VIDEO_ANEXO
  DROP CONSTRAINT SYS_C007439;

ALTER TABLE TESTES_OR.TB_VIDEO_ANEXO
  DROP CONSTRAINT SYS_C007440;

ALTER TABLE TESTES_OR.TB_VIDEO_ANEXO ADD (
  CTIPO NOT NULL,
  BANEXO NOT NULL,
  PRIMARY KEY
  (NID_ANEXO));

ALTER TABLE TESTES_OR.TB_DEPARTAMENTO
  DROP CONSTRAINT SYS_C007405;

ALTER TABLE TESTES_OR.TB_DEPARTAMENTO
  DROP CONSTRAINT SYS_C007403;

ALTER TABLE TESTES_OR.TB_DEPARTAMENTO
  DROP CONSTRAINT SYS_C007404;

ALTER TABLE TESTES_OR.TB_DEPARTAMENTO ADD (
  PRIMARY KEY
  (NID_DEPARTAMENTO));

ALTER TABLE TESTES_OR.TB_EMPRESA
  DROP CONSTRAINT SYS_C007402;

ALTER TABLE TESTES_OR.TB_EMPRESA
  DROP CONSTRAINT SYS_C007400;

ALTER TABLE TESTES_OR.TB_EMPRESA
  DROP CONSTRAINT SYS_C007401;

ALTER TABLE TESTES_OR.TB_EMPRESA ADD (
  PRIMARY KEY
  (NID_EMPRESA));

ALTER TABLE TESTES_OR.TB_ENDERECO
  DROP CONSTRAINT SYS_C007398;

ALTER TABLE TESTES_OR.TB_ENDERECO
  DROP CONSTRAINT SYS_C007399;

ALTER TABLE TESTES_OR.TB_ENDERECO ADD (
  PRIMARY KEY
  (NID_ENDERECO));

ALTER TABLE TESTES_OR.TB_ESTADO
  DROP CONSTRAINT SYS_C007424;

ALTER TABLE TESTES_OR.TB_ESTADO
  DROP CONSTRAINT SYS_C007425;

ALTER TABLE TESTES_OR.TB_ESTADO ADD (
  PRIMARY KEY
  (NID_ESTADO));

ALTER TABLE TESTES_OR.TB_LOG
  DROP CONSTRAINT SYS_C007468;

ALTER TABLE TESTES_OR.TB_LOG
  DROP CONSTRAINT SYS_C007466;

ALTER TABLE TESTES_OR.TB_LOG
  DROP CONSTRAINT SYS_C007467;

ALTER TABLE TESTES_OR.TB_LOG ADD (
  PRIMARY KEY
  (NID_LOG));

ALTER TABLE TESTES_OR.TB_PROFISSIONAL
  DROP CONSTRAINT SYS_C007463;

ALTER TABLE TESTES_OR.TB_PROFISSIONAL
  DROP CONSTRAINT SYS_C007464;

ALTER TABLE TESTES_OR.TB_PROFISSIONAL
  DROP CONSTRAINT SYS_C007465;

ALTER TABLE TESTES_OR.TB_PROFISSIONAL ADD (
  PRIMARY KEY
  (NID_PROFISSIONAL));

ALTER TABLE TESTES_OR.TB_SITUACAO
  DROP CONSTRAINT SYS_C007426;

ALTER TABLE TESTES_OR.TB_SITUACAO
  DROP CONSTRAINT SYS_C007427;

ALTER TABLE TESTES_OR.TB_SITUACAO ADD (
  PRIMARY KEY
  (NID_SITUACAO));

ALTER TABLE TESTES_OR.TB_TAG
  DROP CONSTRAINT SYS_C007460;

ALTER TABLE TESTES_OR.TB_TAG
  DROP CONSTRAINT SYS_C007461;

ALTER TABLE TESTES_OR.TB_TAG
  DROP CONSTRAINT SYS_C007462;

ALTER TABLE TESTES_OR.TB_TAG ADD (
  PRIMARY KEY
  (NID_TAG));

ALTER TABLE TESTES_OR.TB_TELEFONE
  DROP CONSTRAINT SYS_C007396;

ALTER TABLE TESTES_OR.TB_TELEFONE
  DROP CONSTRAINT SYS_C007397;

ALTER TABLE TESTES_OR.TB_TELEFONE ADD (
  PRIMARY KEY
  (NID_TELEFONE));

ALTER TABLE TESTES_OR.TB_ADMINISTRADOR ADD (
  FOREIGN KEY ("DEPARTAMENTO") 
  REFERENCES TESTES_OR.TB_DEPARTAMENTO (SYS_NC_OID$));

ALTER TABLE TESTES_OR.TB_AUDIO_ANEXO ADD (
  FOREIGN KEY ("VIDEO") 
  REFERENCES TESTES_OR.TB_VIDEO (SYS_NC_OID$));

ALTER TABLE TESTES_OR.TB_DOCUMENTO_ANEXO ADD (
  FOREIGN KEY ("VIDEO") 
  REFERENCES TESTES_OR.TB_VIDEO (SYS_NC_OID$));

ALTER TABLE TESTES_OR.TB_EDITOR ADD (
  FOREIGN KEY ("DEPARTAMENTO") 
  REFERENCES TESTES_OR.TB_DEPARTAMENTO (SYS_NC_OID$));

ALTER TABLE TESTES_OR.TB_IMAGEM_ANEXO ADD (
  FOREIGN KEY ("VIDEO") 
  REFERENCES TESTES_OR.TB_VIDEO (SYS_NC_OID$));

ALTER TABLE TESTES_OR.TB_NORMAL ADD (
  FOREIGN KEY ("DEPARTAMENTO") 
  REFERENCES TESTES_OR.TB_DEPARTAMENTO (SYS_NC_OID$));

ALTER TABLE TESTES_OR.TB_VIDEO ADD (
  FOREIGN KEY ("SITUACAO") 
  REFERENCES TESTES_OR.TB_SITUACAO (SYS_NC_OID$),
  FOREIGN KEY ("ESTADO") 
  REFERENCES TESTES_OR.TB_ESTADO (SYS_NC_OID$),
  FOREIGN KEY ("EDITOR") 
  REFERENCES TESTES_OR.TB_EDITOR (SYS_NC_OID$));

ALTER TABLE TESTES_OR.TB_VIDEO_ANEXO ADD (
  FOREIGN KEY ("VIDEO") 
  REFERENCES TESTES_OR.TB_VIDEO (SYS_NC_OID$));

ALTER TABLE TESTES_OR.TB_DEPARTAMENTO ADD (
  FOREIGN KEY ("EMPRESA") 
  REFERENCES TESTES_OR.TB_EMPRESA (SYS_NC_OID$));

ALTER TABLE TESTES_OR.TB_EMPRESA ADD (
  FOREIGN KEY ("ENDERECO") 
  REFERENCES TESTES_OR.TB_ENDERECO (SYS_NC_OID$)
  ON DELETE CASCADE);

ALTER TABLE TESTES_OR.TB_LOG ADD (
  FOREIGN KEY ("EDITOR") 
  REFERENCES TESTES_OR.TB_EDITOR (SYS_NC_OID$));
